关于异步socket下TCP数据完整的问题。答对马上给分。
gnhao 2008-05-07 11:45:58 上次也问了。不过朋友们说的是我知道的保证数据完整的方法。
如下:
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
{
////处理数据
}
}
}
我的问题就是第二段代码中那个咋办!!!!!(// 这里没有读取完咋办?而且有可能下一次的异步消息不是这个套接字发出的!!!)