【问题标题】:TCP socket behavioral in pythonpython中的TCP套接字行为
【发布时间】:2012-01-11 10:12:51
【问题描述】:

我在 Python 中有一个客户端-服务器通信。如果我在一个包中从服务器向客户端发送 10MB 数据,客户端可以在一个包中处理这些大数据吗?如果客户端在 1 分钟后读取数据怎么办。例如,我建立连接并向客户端发送 10MB 消息,但客户端只能在 1 分钟或更长时间后才能接收到消息。 TCP 缓冲区有多大?是否有可能丢失数据(缓冲区溢出)。它会挂起服务器吗?

time.sleep(60)
self.request.recv( 20480 )

【问题讨论】:

    标签: python tcp


    【解决方案1】:

    TCP是面向流的,不是面向包的,所以说TCP中的“一个包”是没有意义的。虽然数据实际上将作为 IP 数据包在网络堆栈的下方发送,但 TCP 层将保证您无法辨别数据是如何拆分为数据包并在接收端重新组合的。

    标准中没有指定TCP缓冲区大小,但是如果服务器端的缓冲区已满时服务器没有从套接字读取,客户端将停止发送。换句话说,TCP 是做流量控制的。在这种情况下,您实际上可能会挂起客户端。


    您应该做的是不断地从客户端发送一些可管理大小(例如 8k)的块,并不断地在服务器上读取。如果需要,数据应在程序的服务器端缓冲。正如我所说,TCP 不处理数据包。

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2017-11-01
      • 2021-10-21
      • 2013-10-24
      相关资源
      最近更新 更多