往socket发送大量数据,接收方无法读取到完整数据

大家有没有遇到一种情况,客户端往服务器的socket发送了一个很大的数据(3万+byte),在服务器那边read socket的时候没有读到所有的数据,服务器用while去读但是都无法读到客户端发过来的所有数据,读取socket fd的代码如图
图片说明

建议你从如下角度检查或修改代码:

  1. 你是否使用循环send,并确定3W+字节都已经发送?
  2. TCP传输数据会受网络影响,如果网络发生拥塞,3W+字节可能不会一次性全部到达,这样仍然可能在收完3W+字节数据前read返回EAGAIN,这种情况下,建议你在包头加4个字节的int值来标识整个数据包的长度,然后你的收包端代码先读取这个长度,然后再在多次循环中将数据收齐(如返回EAGAIN,那就等待下次再接收后续数据)

建议你先发少量的数据试试通讯是否正常?另外,你的大数据发送时有没有分包呢?是需要分包处理的。

有循环去send,我用了你的方法实现了,谢谢!(在包头加4个字节的int值来标识整个数据包的长度,然后你的收包端代码先读取这个长度,然后再在多次循环中将数据收齐(如返回EAGAIN,那就等待下次再接收后续数据))