python socket.recv() 一直不停的返回空字符串原因。

python socket.recv() 一直不停的返回空字符串原因。

我遇到的是,因为客户端异常断开连接,之后服务端就一直接收到空字符串。

这样会无法分辨是客户端真的发了一个空串还是怎么样。

下面是复现问题的demo。

先运行server端:

# coding=utf-8
import socket
if __name__ == '__main__':
    host = 'localhost'
    port = 8765

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((host, port))
    server.listen(1)  # 连接数
    client, address = server.accept()
    while True:  # 循环收发数据包
        data = client.recv(1024)
        print ("data:"+data)

再运行client端:

# coding=utf-8
import socket
import time

if __name__ == '__main__':
    host = 'localhost'
    port = 8765
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)  # 在客户端开启心跳维护

    while True:
        client.connect((host, port))  # ###注意这里,会报错导致代码崩溃,这时候去看服务端输出,就可以看到无限就收空串
        client.send('hello world\r\n'.encode())
        print('send data')

最终运行结果:

客户端结果:


send data
Traceback (most recent call last):
  File "C:/Users/Rorschach/Desktop/test/test2.py", line 17, in <module>
    client.connect((host, port))  # ###注意这里,会报错导致代码崩溃,这时候去看服务端输出,就可以看到无限就收空串
  File "C:\Python27\Lib\socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 10056] A connect request was made on an already connected socket


服务端结果:


C:\Users\Rorschach\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/Rorschach/Desktop/test/test1.py
data:hello world

hello world

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

data:

参考:https://blog.csdn.net/bbg221/article/details/78464051

侵删

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值