?
快捷搜索:  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);

}

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户