问题描述
|
这相当于什么?
while (Offset < packet.Data.Length)
{
Offset += m_Socket.Receive(packet.Data,Offset,packet.Data.Length - Offset,SocketFlags.None);
}
在Siliverlight中?那是Windows窗体,不适用于Silverlight:/任何帮助将不胜感激。
谢谢
该函数的作用是,在\“ completed \”子目录中,我捕获了4个字节,这是服务器中的标头长度,在捕获了这4个字节之后,我想进入endReceive方法,该方法将获取其余数据包的长度。
我将如何在Silverlight中做到这一点?
解决方法
Silverlight没有同步的Socket方法。您将需要使用Socket.ReceiveAsync方法。
这里是一个很好的例子:使用套接字将数据推送到Silverlight客户端。
[编辑]做这样的基本想法:
var e = new SocketAsyncEventArgs();
e.Completed += SocketReceiveCompleted;
Socket.ReceiveAsync(e);
private void SocketReceiveCompleted(object sender,SocketAsyncEventArgs e)
{
Offset += e.BytesTransferred;
if (Offset > packet.Data.Length)
{
Socket.Close(); // or do whatever you need to do after your while loop
return;
}
Array.Copy(e.Buffer,packet.Data,Offset,e.BytesTransferred);
}