LLR104
LLR104
采纳率28.6%
2015-04-26 07:57 阅读 5.8k

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

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

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

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

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

    点赞 1 评论 复制链接分享
  • LLR104 LLR104 2015-04-26 12:38

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

    点赞 评论 复制链接分享

相关推荐