TCP传输大量数据丢失?
写了一个客户端/服务器端程序,客户端向服务器端发送文件,客户端采用socket中send函数发送数据,每次向send缓冲区发送1024*1024字节,服务器端采用完成端口接收数据。结果有很多数据丢失,tcp不是保证数据不会丢失吗?
发送时用read函数从文件中读取1024*1024字节内容,然后直接发送,不断循环。像这样情况,tcp能保证数据传输可靠吗?能保证接收到数据的顺序就是发送的顺序吗?
[解决办法]
客户端send的时候先用阻塞模式,注意检查函数返回值,确认不是客户端的代码的问题先
[解决办法]
发送端给包加个索引号, 然后包头中加入发送数据的小大!
然后按照那个大小来接收!确保数据都能接收完成!
[解决办法]
你检查 send 的返回值了吗?
如果 send 返回错误, 这样的数据是不会发送出去的, 他们都没能放入发送的缓冲区.
[解决办法]
tcp的send和recv都是要检查返回值的
ret = send(sock, buff, 1024,0) 不能保证 ret的值一定等于1024,这种情况下,用while循环进行发送,直到ret累加=1024,才算发送完整。
recv也是同样的道理。都必须检查返回值并用while循环保证完整的接受。
[解决办法]
楼主代码BUG,我们以前也干过,传文件都没问题