python socket.recv(

2023-01-31 05:01:08 python recv Socket

之前写代码的时候, 发现Socket的 recv 函数一直返回空字符串。 

感觉很是奇怪,自己没有去设置阻塞模式,也就是默认的阻塞模式,为什么不阻塞在那里,而是要一直收到空呢?

python的官网上仔细查看了这个函数的说明,托 防火长城 的福,等了半天,终于打开了这个美国的网站。

socket.recv(bufsize[, flags])

Receive data from the socket. The return value is a string representing the data received. The maximum amount of data to be received at once is specified by bufsize. See the Unix manual page recv(2) for the meaning of the optional argument flags; it defaults to zero.

Note

 

For best match with hardware and network realities, the value of bufsize should be a relatively small power of 2, for example, 4096.

就这么短短的一段话,并没有说明重复收到空字符串是咋回事。 因为服务端是别人写的,我一直不得解释。 后面我自己写了个服务端,不小心把服务端代码写错,半途崩溃了,客户端又出现了这样的问题。 

经过测试发现通道断开或者close之后,就会一直收到空字符串。 而不是所谓的-1 或者报异常。这个跟C 和java等其他语言很不一样

我后续仔细浏览了整个socket文档,一直没有发现通道断开后会出现的情况。 老外的文档其实写的也不是那么仔细。至少这个点没有写。 


百度了许久没有找到这个答案,于是我自己写出来,希望可以给迷茫在这个点上的孩子一点光亮。


如有其他问题,可以留言。

相关文章