发送数据到底发生了什么我已经从Socket Programming HOWTO in Python Documentation当套接字接收/ Python中
阅读您可以将您的客户端套接字到一个类文件的野兽,使用读写。 ...除了警告你,你需要在套接字上使用flush。这些都是缓冲的“文件”,一个常见的错误是写一些东西,然后阅读答案。如果没有在那里刷新,您可能会永远等待回复,因为请求可能仍在输出缓冲区中。
现在我们就来插座的主要绊脚石 - send和recv在网络缓冲区操作
在Python socket object
是一个文件描述符,并且可以使用makefile()
获得与插座相关的file object
。
据警告,
您需要在插座使用平齐。这些是缓冲“文件” ...如果没有在那里刷新,您可能会永远等待回复,,因为请求可能仍然在您的输出缓冲区 ...发送和recv操作网络缓冲区
我想当socket send/recv
,实际上有两个缓冲区:“文件缓冲区”和“网络缓冲区”。如果将socket
转换为file like object
并使用write(data)
,首先将数据写入“文件输出缓冲区”,然后使用flush
将数据写入“网络发送缓冲区”。所有这些都可以解释文档中的警告:在write
之后使用flush
或read
可能永远阻塞。
我画了一张照片,以显示我对socket
潜在“两种缓冲区”的看法。
所以我的问题是如何理解上面的报价?我的“两种缓冲”模式是否理解正确?希望你的回复,谢谢!