我正在尝试使用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代码中创建的套接字对象,
亲切的问候
答案 0 :(得分:1)
使用套接字API,您不必担心TCP(排序,重新传输等等),它们都由操作系统处理。唯一的问题是socket.recv()
将返回最多 n个字节。这意味着无法保证在每次阻塞读取时都会收到n个字节。因此,您必须在循环中读取,直到收到所需的字节数。