【问题标题】:how to receive all data Python socket programmingPython socket编程如何接收所有数据
【发布时间】:2018-07-15 11:00:28
【问题描述】:
data = self.SOCKET.recv(16384)
users = data.decode().split('&')

print(users)

我正在开发聊天程序。当我收到少量数据(大约 100 个字符)时,我可以看到所有数据。但是当我收到更多数据(大约是 10000 个字符)时,我看不到完整的数据。我只能看到一些部分。之后,当我的朋友用另一台电脑收到10000字的数据时,他可以看到所有的数据。 我认为这取决于以太网和wifi。所以我的朋友用wifi尝试了它。他再次可以接收所有数据。是不是依赖电脑?我们应该手动进入接收缓冲区吗?有什么区别?

*100 和 10000 字符例如。

【问题讨论】:

  • recv 不知道需要多少数据,只知道最新数据包中有多少。等待多少取决于协议。它可能需要多次调用recv 才能获取所有数据。

标签: python sockets buffer


【解决方案1】:

使用此代码接收数据:

while True:
    data = self.SOCKET.recv(512)
    if (len(data) < 1):
        break
    print(data.decode())

self.SOCKET.close() # close the socket connection

这应该可行。我不能更具体,因为我不知道你的程序的上下文。不要复制粘贴代码,而是进行相应的调整。如果不起作用,请返回反馈。

【讨论】:

  • 感谢您的帮助。你给了我主要的想法。我不能使用len(data)&lt;1,因为我最后的数据总是可以有很多字符。如果没有返回任何数据,print(len(data))print(len(data.decode())) 不提供任何值。我知道我的数据是最后一个特殊的附加术语。
  • 如果发送者在接收者调用下一个recv之前没有发送下一个数据包,这将失败。需要以一种告诉接收者等待的字节数的方式定义协议。
  • @stark 是正确的。因此,您需要识别另一个表示数据传输结束的逻辑,而不是len(data) &lt; 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 2013-07-14
  • 2015-07-22
  • 1970-01-01
  • 2015-07-31
相关资源
最近更新 更多