socket异步接收
public static void ReadCallback(IAsyncResult objIAsyncResult)
{
StateObject objStateObject = (StateObject)objIAsyncResult.AsyncState;
Socket objSocketHandler = objStateObject.objSocketWork;
string strIP = objSocketHandler.RemoteEndPoint.ToString();
int intBytesRead = objSocketHandler.EndReceive(objIAsyncResult);
if(intBytesRead > 0)
{
string strTemp = "";
byte[] btReceive = new byte[intBytesRead];
for(int i=0;i<intBytesRead;i++)
{
btReceive[i] = objStateObject.btBuffer[i];
/// 一定要转换位16进制的
strTemp += btReceive[i].ToString("0X");
}
/// 解析数据包内容
PackUnpackData.clsPackUnpackData.ddrDealData(objSocketHandler,strTemp);
objSocketHandler.BeginReceive(objStateObject.btBuffer,0,StateObject.intBufferSize,0,new AsyncCallback(ReadCallback),objStateObject);
}
}
对于以上,如果数据包长度过大,缓冲区只设置位512,并且数据包设置起始符和终止符,如何接收一条完整的数据之后再对数据包进行整体处理
例如:
数据包格式:AAAA……BBBB,长度大于512
当收到完整的数据AAAA……BBBB之后再将其送到其他函数中进行处理
问:这样的情况会不会出现(缓冲区收到前512个字节后,再此收到剩余的之后,新的数据包紧跟着剩余数据包,如下……BBBBAAAA……)?
如出现应该如何处理