【问题标题】:How to check if all data are received with a TCP Socket in Python如何在 Python 中检查是否使用 TCP 套接字接收到所有数据
【发布时间】:2014-07-07 03:05:51
【问题描述】:

我正在尝试使用 Python 作为编程语言从 TCP 连接(仅限客户端)获取数据,

但是,我可以看到所有数据都不是一次接收,而是在接收过程中被切断......我可以在论坛上看到 TCP 没有以正确的顺序发送数据(有点随机,链接:Python socket receive - incoming packets always have a different size),我错了吗?

我的问题是,是否有办法确保我正确接收了所有数据?

提前感谢您的帮助和回复,

PS:我已经增加了 socket.recv() 的缓冲区大小,但仍然面临同样的问题......而且我只在 CentOS 下工作

编辑:(无法回答我自己的问题:(在这个论坛上还是初学者:))

嗨,

非常感谢您的回复,我确实不用担心 TCP 连接 :)

经过更多调查,我终于找到了解决方案......(我在这里发布我的问题之前搜索了几天),

如果有人需要答案,在python中你必须等待完整的消息,否则消息可以被剪切,所以这意味着:

data = s.recv(1024, socket.MSG_WAITALL) --> 's'是python代码中创建的socket对象,

亲切的问候

【问题讨论】:

    标签: python sockets tcp buffer recv


    【解决方案1】:

    使用套接字 API,您不必担心 TCP(排序、重传等),所有这些都由操作系统处理。唯一的问题是socket.recv() 将返回最多 n 个字节。这意味着不能保证每次阻塞读取都会收到 n 个字节。因此,您必须循环读取,直到收到所需的字节数。

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多