C#Silverlight等效的Windows窗体方法?

时间:2011-06-04 02:39:15

标签: c# .net silverlight sockets

这是什么意思:

while (Offset < packet.Data.Length)
{
    Offset += m_Socket.Receive(packet.Data, Offset, packet.Data.Length - Offset, SocketFlags.None);
}

在Siliverlight?这是Windows窗体,不适用于Silverlight:/任何帮助将不胜感激。

由于

该函数的作用是,在“已完成”子上,我抓住了4个字节,这是我服务器的标头长度,在我抓住那4个字节之后我想进入endReceive方法获取剩余的数据包长度。

我如何在Silverlight中执行此操作?

1 个答案:

答案 0 :(得分:4)

Silverlight没有同步Socket方法。您需要使用Socket.ReceiveAsync Method

这里的好例子:Pushing Data to a Silverlight Client with Sockets

[编辑] 这样做的基本想法:

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, 0, packet.Data, Offset, e.BytesTransferred);
}