快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

游艇会官方线路:Silverlight异步Socket通信



先看下实现效果

办事端WPF:

多个用户连接办事端,办事端接管所有用户发过来的信息,也可以向指定的用户发送信息。

客户端Silverlight:

客户端向办事端发送信息,并接管办游艇会官方线路事端发过来的信息。

这个DEMO的代码参考了这个http://msdn.microsoft.com/zh-cn/magazine/dd315415.aspx,照样官方的代码信得过!Silverlight的客户端没的说,只能用异步Socket实现,WPF的办事端也采纳了.net 3.5今后才呈现的异步Socket,听说这样可以大年夜大年夜增强办事器真个处置惩罚能力。

项目布局如图:

分为三个项目:办事端,客户端和用来宿主SL的web项目,办事端打开两个端口,943和4530,游艇会官方线路943用来向Silverlight供给跨域文件,4530用来和Silverlight法度榜样通信,我主要说说这个DEMO里面我感觉对照好的地方:

1、客户端和办事端整个采纳异步Socket,而没有采纳多线程实现,增强法度榜样稳定性,增强法度榜样处置惩罚能力,例如信息接管部分:

代码

public void ReceiveAsync()

{

ReceiveAsync(_receiveSocketArgs);

}

private void ReceiveAsync(Sock游艇会官方线路etAsyncEventArgs socketAsyncEventArgs)

{

if (!_acceptedSocket.ReceiveAsync(socketAsyncEventArgs))

{

ReceiveCallback(_acceptedSocket, socketAsyncEventArgs);

}

}

void ReceiveCallback(object sender, SocketAsyncEventArgs e)

{

if (e.SocketError != SocketError.Success)

{

return;

}

_receiveBu游艇会官方线路ffer.Offset += e.BytesTransferred;

if (_receiveBuffer.IsMessageReceived())

{

if (OnReceive != null)

{

NetworkMessage msg = NetworkMes游艇会官方线路sage.Deserialize(_receiveBuffer.Buffer);

_receiveBuffer.AdjustBuffer();

OnReceive(this, new ReceiveArgs(msg));

}

}

else

{

//adjust the buffer pointer

e.SetBuffer(_receiveBuffer.Offset, _receiveBuffer.Remaining);

}

//queue a an async read request

ReceiveAsync(_receiveSocketArgs);

}

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: