LLR104
2015-04-26 07:57
采纳率: 28.6%
浏览 6.0k

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 开水 2015-04-26 09:28
    已采纳

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

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

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

    打赏 评论
  • LLR104 2015-04-26 12:38

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

    打赏 评论

相关推荐 更多相似问题