异步SOCKET接收粘包问题-100分
基于TCP异步SOCKET服务端与客户端程序:
服务端循环分包发送每次包大小为 4906 字节
客户端异步BEGINRECEIVE接收
const int BagSize = 8192
private void receiveCallBack(IAsyncResult ar)
{
Socket MySocket = (Socket)ar.AsyncState;
int receLen = 0;
try
{
//** 此处每次接收的字节应该是分包发送的字节(4096),但是除第一次接收为4096外(10%为8192),接收其他分包都为8192
receLen = MySocket.EndReceive(ar);
}
catch (Exception err)
{
return;
}
if (receLen > 0)
{
byte[] currentBin = new byte[receLen];
Buffer.BlockCopy(data, 0, currentBin, 0, receLen);
MyList.ReceivedCallBack(currentBin, MySocket, ar); //此处逻辑处理收到数据
try
{
ReceiveData();
}
catch (SocketException)
{
MySocket.Close();
}
}
else
{
}
}
例如服务端发送10K的字节,那么是分为三个包发送的,第一个4906字节,第二个4906字节,第三个428字节,每次循环分包发送均不延时。
问:
客户端在接收的时候,怎么解决粘包的问题。