心跳机制的实现:固定时间的下客户端给服务的端发送消息,出现异常便会抛出异常
服务端Python代码, 在PyCharm上:
import socket
import datetime
def ServerHeadBeat():
global stattime, endtime
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 9999))
s.listen(2) # 同时监听两个
starttime = None
endtime = None
s.settimeout(None)
conn,addr=s.accept()
starttime - datetime.datetime.now()
while True:
try:
s.settimeout(5) # 超过这个时间就会包异常
conn,addr=s.accept()
print('client addr',addr) # 打印客户端的地址
client_msg=conn.recv(1024) # 客户端发送过来的消息
print('client msg: %s' %(str(client_msg))) # 'utf-8'
except Exception as e:
endtime = datetime.datetime.now()
print('连接已断开,本次连接持续 %s 秒'%str((endtime - starttime).seconds) + "异常情况为:" + str(e))
break
if __name__ == '__main__':
ServerHeadBeat()
客户端Python代码,也可以同时写两个client, 在IDLE上:
import socket
import time
def ClientHeadBeat():
a = 0
while True:
time.sleep(4) # 最好要小于服务端你的超时时间,否则会报异常
a += 1
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 9999))
msg = "已连接" + str(a*4) + "秒"
s.send(bytes(msg), 'UTF-8') # 如果报错就把 'UTF-8' 去掉
if __name__ == "__main__":
ClientHeadBeat()