python中的TCP套接字行为

时间:2012-01-11 10:12:52

标签: python tcp

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

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

1 个答案:

答案 0 :(得分:3)

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

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


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