您的位置:首页 > 编程语言 > Python开发

python socket.recv() 一直不停的返回空字符串,客户端怎么判断连接被断开?

2017-11-07 09:05 886 查看
之前写代码的时候, 发现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文档,一直没有发现通道断开后会出现的情况。 老外的文档其实写的也不是那么仔细。至少这个点没有写。 

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

如有其他问题,可以留言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python socket recv