110,566
社区成员
发帖
与我相关
我的任务
分享
m_RecvSize += m_ClientSocket.EndReceive(ar); //m_RecvSize是类成员,这个地方需要累加.
//数据包头大小
int nHeadSize = Marshal.SizeOf(typeof(tagCMDHead));
while (m_RecvSize >= nHeadSize)
{
//转为结构体
tagCMDHead cmdHead = (tagCMDHead)DataOperate.ByteToObject (m_RecvBuffer, typeof(tagCMDHead));
//数据包大小
int nPackSize = nHeadSize + cmdHead.wDataSize;
if (m_RecvSize < nPackSize) break;
//接收用户数据
byte[] byteData = DataOperate.MidByte(m_RecvBuffer, nHeadSize, nPackSize);
m_SocketEvent.OnRecv(cmdHead.wMainFlag, cmdHead.wSubFlag,
byteData, cmdHead.wDataSize);
//继续接收
byte[] nPartBuffer = DataOperate.MidByte(m_RecvBuffer, nPackSize, m_RecvSize);
//复制数据
DataOperate.ArrayCopy(m_RecvBuffer, 0, nPartBuffer, 0, nPartBuffer.Length);
m_RecvSize -= nPackSize;
}
}
投递接收请求时:
m_ClientSocket.BeginReceive(m_RecvBuffer, m_RecvSize, SOCKET_RECV_BUFFER_SIZE - m_RecvSize, 0, new AsyncCallback(ReadCallBack), this);
这样就可以了.