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

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


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


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

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值