gpt4 book ai didi

python - 如何检查是否所有数据都通过 Python 中的 TCP 套接字接收到

转载 作者:可可西里 更新时间:2023-11-01 02:52:00 26 4
gpt4 key购买 nike

我正在尝试使用 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 代码中创建的套接字对象,

亲切的问候

最佳答案

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

关于python - 如何检查是否所有数据都通过 Python 中的 TCP 套接字接收到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23732930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com