当前位置: 技术问答>linux和unix
请教: tcp传输同步问题
来源: 互联网 发布时间:2015-12-16
本文导语: tcp作为一种面向字节流的协议, 我们在编程时如果在调用read 或write时读或写的字节数和期望的字节数不同(假设网络问题丢了几个字节或者 网络延迟导致一次没读完), 会不会发生在这以后的所有包都不同步从而在这...
tcp作为一种面向字节流的协议, 我们在编程时如果在调用read
或write时读或写的字节数和期望的字节数不同(假设网络问题丢了几个字节或者
网络延迟导致一次没读完), 会不会发生在这以后的所有包都不同步从而在这个错误
发生后读写的都不正确?
比如: 发送方发送一个10字节的包头, 读方按10字节读这个包头, 但由于网络延迟,
读方只读到5字节, 然后, 由于读方程序一直按10字节来读, 但他读到的第二个包
是第一个包的后半部分+第二个包的前半部分, 如此循环,是否一直出错?
这种同步的问题一般怎么解决?
或write时读或写的字节数和期望的字节数不同(假设网络问题丢了几个字节或者
网络延迟导致一次没读完), 会不会发生在这以后的所有包都不同步从而在这个错误
发生后读写的都不正确?
比如: 发送方发送一个10字节的包头, 读方按10字节读这个包头, 但由于网络延迟,
读方只读到5字节, 然后, 由于读方程序一直按10字节来读, 但他读到的第二个包
是第一个包的后半部分+第二个包的前半部分, 如此循环,是否一直出错?
这种同步的问题一般怎么解决?
|
1,读的时候循环读,直到读到我们所请求的字节数,或出错或读完数据才返回。
2,可以自己定义一个包头,包尾来匹配数据的完整性与正确性。
2,可以自己定义一个包头,包尾来匹配数据的完整性与正确性。