关于异步socket下TCP数据完整的问题。答对马上给分。
上次也问了。不过朋友们说的是我知道的保证数据完整的方法。
  如下:
  1.加标识
  2.发送消息长度的消息头
  3.固定长度。
我可能没表达清楚.
如果是同步(阻塞)我可以在那个套接字上一直读取,比如用每二种方法
string read()
{
  return string;//读取到后返回
}
//变量
string strCurrent;
在另一个函数中
function another
{
  while(1)
  {
   strCurrent+=read();//阻塞中
   //然后从消息头中得到长度
   if(current_legnth<real_lenght)
   {
   // 这里再一次进行读取/再进行判断
    cotinue;
   }
   else
    break;
   }
//到这里收完了
}
而在异步下
也用二种保证完整的方法
1. build socket................
2. AsyncSelect(socket,FD_READ);//这里用异步选择吧。完成端口还有其它异步模型我也有同样的可能不正解的疑问!!!!
//变量
string strCurrent;
在处理异步消息的函数中
void OnSock(...)
{
   strCurrent+=rceive(.....);
   //然后从消息头中得到长度
   if(current_legnth<real_lenght)
   {
    // 这里没有读取完咋办?而且有可能下一次的异步消息不是这个套接字发出的!!!
   }
   else  
 {
   ////处理数据
  }   
}
}
我的问题就是第二段代码中那个咋办!!!!!(// 这里没有读取完咋办?而且有可能下一次的异步消息不是这个套接字发出的!!!)
------解决方案--------------------
这里没有读取完咋办?
为Socket建立一个缓存,如果没读取完就把现有的数据缓存起来,直到数据全部读取到为此。
///而且有可能下一次的异步消息不是这个套接字发出的!!
这个是不可能的,同一个客户端发过来的数据不可能会被不同的Socket接收到。
------解决方案--------------------