快乐的鲸鱼

Python开发周记【一】

2016/12/12

客户端监听Socket,并包括断开错误处理

正常情况下recv()是阻塞的,我们可以用while循环去阻塞监听服务端发来的消息。但是连接被断开的时候是非阻塞的,也就是会不断接收到长度为0的消息。所以我们利用这一点去判断连接是否断开了。

1
2
3
4
5
6
7
8
9
10
11
# 判断发送的数据大小、如果大于0就接收服务端的数据并打印出来
# 正常情况下recv()是阻塞的,但是连接被断开的时候是非阻塞的
amount_received = 1
try:
while received_length > 0:
data = self.recv()
print("recive message: ", data, " and length: ", len(data))
received_length = len(data)
finally:
self.close()
print('ERROR: socket is closed ,listen thread over')

单例模式

1
2
3
4
5
def singleton(cls):
"""实现单例模式的装饰器"""
instance = cls()
instance.__call__ = lambda: instance
return instance
CATALOG
  1. 1. 客户端监听Socket,并包括断开错误处理
  2. 2. 单例模式