2
所以我建立了一個連接,一切都很好,我開始設置代碼從服務器讀取數據包。我想要構造它的方式是使用一個數據包標識符方法,該方法讀取單個字節(數據包ID)並分支到適當的方法以讀取其餘部分。問題在於最後一個語句 - 一切正常,直到我分支,當我得到這個異常:Windows Phone 7和套接字:我做錯了什麼?
使用此SocketAsyncEventArgs實例的異步套接字操作已在進行中。
這裏的總體思路:
private void IdentifyPacket(object sender, SocketAsyncEventArgs e)
{
e.Completed -= new EventHandler<SocketAsyncEventArgs>(IdentifyPacket);
if (e.SocketError != SocketError.Success)
{
ForceDisconnectWithError(new SocketErrorEventArgs(netSocket, e.SocketError));
return;
}
PacketID packet = (PacketID)e.Buffer[0];
switch (packet)
{
case PacketID.KeepAlive:
e.SetBuffer(new byte[4], 0, 4);
e.Completed += new EventHandler<SocketAsyncEventArgs>(HandleKeepAlive);
e.ConnectSocket.ReceiveAsync(e);
break;
default:
RelinkPacketManager();
break;
}
}
private void RelinkPacketManager()
{
socketConfig.SetBuffer(new byte[1], 0, 1);
socketConfig.Completed += new EventHandler<SocketAsyncEventArgs>(IdentifyPacket);
netSocket.ReceiveAsync(socketConfig);
}
的思考?
e.Buffer的長度爲1的運行IdenfityPacket方法時。 – SirCmpwn 2011-12-30 11:42:58
嗯,我的意思是,你的回答如何?你的響應可能與這個'[0x01,0x0A,0x0B]'一樣,所以當你使用'e.Buffer [0]'時,即使你需要收集的數據是正確的,你也會跳過'0x0A'和'0x0B'在假設'[0x01]'表示'KeepAlive'的第一個字節之後。 – abhinav 2011-12-30 11:50:10
我有工作方法,使用這個系統的「接收部分,推遲其餘的」所有數據都被正確接收。 – SirCmpwn 2011-12-30 18:53:57