首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教,在外网环境下,如何判断非阻塞TCP接收数据完成

2013-08-04 
请问,在外网环境下,怎么判断非阻塞TCP接收数据完成?请问,在外网环境下,怎么判断非阻塞TCP接收数据完成?附

请问,在外网环境下,怎么判断非阻塞TCP接收数据完成?
请问,在外网环境下,怎么判断非阻塞TCP接收数据完成?
附加:
1.排除加标志和设置长度的方法。
2.经过测试,recv返回-1,errno为EAGAIN的结果,并不是接收数据完成的情况。
TCP/IP 非阻塞 外网
[解决办法]
client端发送完数据close socket,server端根据socket close事件来判断是否完成。
这样如果client异常断开的话,判断失效;所以最好的方式还真是 附加1 提到的方式。
[解决办法]
TCP的FIN?
[解决办法]
tcp是基于流的,哪来的什么接收结束?比如发送123456一个包可能接收是12,34,56三个包,你怎么判断是否结束?
[解决办法]
加标志或标记长度 就是最好的办法

ip协议,TCP协议,UDP协议
他们自身都是在协议头部设计了一个字段来表示长度
如果还有更好的办法
那设计这些协议的人他们自己为什么不用呢 
[解决办法]


数据收不收完整,是协议来判断的。

通讯和协议是分开设计的。

通讯负责传输链路
协议负责数据组装。

包完整不完整,把二进制数据,按你的设计协议来解析,能解析成功,符合你的预期就完整。
[解决办法]
rrno=EAGAIN表示的是你的write本来是非阻塞情况,现在没有数据可读,这个时候就会置全局变量errno为EAGINA,表示可以再次进行读操作。 

如果不能加一个定长来说明 接收数据完成,

那就只能在数据段中加一个 特殊定的字符,当接收到这个字符的时候表示接收数据完成啦!
断开连接!

热点排行