繁体   English   中英

python中的TCP套接字行为

[英]TCP socket behavioral in python

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

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

TCP是面向流的,而不是面向分组的,因此谈论TCP中的“一个包”是没有意义的。 尽管实际上将数据作为IP数据包发送到网络堆栈的更下方,但TCP层将确保您无法辨别如何将数据拆分为数据包并在接收端重新组合。

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM