当前位置: 技术问答>linux和unix
【请教】read()返回的字节数远远小于write()返回的字节数,接收数据不完整。虚心求解
来源: 互联网 发布时间:2015-10-18
本文导语: 在我写的网络程序中,从主机A向主机B通过TCP发送数据。 定义数据结构为 struct data dbuf; 其中 sizeof(struct data) 值很大,等于100200 向B发送数据过程中,write函数返回值为8969. 而A主机通过read函数收到的字节数却为2690...
在我写的网络程序中,从主机A向主机B通过TCP发送数据。
定义数据结构为
struct data dbuf; 其中 sizeof(struct data) 值很大,等于100200
向B发送数据过程中,write函数返回值为8969.
而A主机通过read函数收到的字节数却为2690,查看数据部分后发现数据不完全,后面的数据缺失
我查了一下read函数的文档
其中有一条说,当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。
不知道该怎么解决这个问题,虚心求解
望各位不吝赐教!
定义数据结构为
struct data dbuf; 其中 sizeof(struct data) 值很大,等于100200
向B发送数据过程中,write函数返回值为8969.
而A主机通过read函数收到的字节数却为2690,查看数据部分后发现数据不完全,后面的数据缺失
我查了一下read函数的文档
其中有一条说,当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。
不知道该怎么解决这个问题,虚心求解
望各位不吝赐教!
|
tcp 就是需要循环读写 才能读写完整的。
|
socket本身称不能保证一次读完信息,加上网络延迟等原因,所以最好循环读
|
可以改socket缓冲区的大小。但读的时候因该是循环读,读到结束标志为止。
|
我也遇到过这个问题。
一个c/s通讯程序,c端往s端传比较大的文件。当读写缓冲区在3000以下时,没什么问题;一超过3000,读写文件就不完整了。后来只有把缓冲区定在3000以下,至今也没找到原因。
GZ!!
一个c/s通讯程序,c端往s端传比较大的文件。当读写缓冲区在3000以下时,没什么问题;一超过3000,读写文件就不完整了。后来只有把缓冲区定在3000以下,至今也没找到原因。
GZ!!
|
把read语句中的接收buff加大,linux默认的接收缓冲为8k