首页 > 解决方案 > Python 从 tcp 套接字接收数据

问题描述

假设我们有:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
data = s.recv(1024)

如果我们收到消息,但最后一条消息不是 1024 字节怎么办。我们还会收到它还是会永远等待?如果没有填满缓冲区,如何接收最后一条消息?

在 Node.js 中,流具有“刷新”行为,其中刷新在内部调用(不确定何时),如下所示:https ://github.com/ORESoftware/json-parser/blob/master/src/index.ts

标签: pythonpython-3.xpython-3.7

解决方案


It is not 1024

可能意味着很多事情,它可能意味着:

  • 它小于 1024 字节:这次无论如何你都会收到部分数据,如果还有其他东西要接收,当你再做一次 recv(..)
  • 它大于 1024 字节:您将收到 1024 字节的数据,其余的被缓冲等待另一个触发到 recv(..)
  • 没有接收数据:recv(..)会一直等到有recv数据,可以通过设置超时来改变

推荐阅读