长链接:开启一个socket链接,收发完数据后,不马上关闭链接,能够屡次收发数据包。python
短链接:开启一个socket链接,收发完数据后,马上关闭链接。socket
心跳:长链接在没有数据通讯时,定时发送数据包(心跳),以维持链接状态。code
在python里,其实不用作那么复杂的事情,心跳检测在TCP协议层会自动维护,python只须要调用接口设置就能够了,直接上代码:server
server端:blog
#coding=utf-8 __author__ = '药师Aric' ''' server端 长链接,短链接,心跳 ''' import socket BUF_SIZE = 1024 host = 'localhost' port = 8083 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((host, port)) server.listen(1) #接收的链接数 client, address = server.accept() #由于设置了接收链接数为1,因此不须要放在循环中接收 while True: #循环收发数据包,长链接 data = client.recv(BUF_SIZE) print(data.decode()) #python3 要使用decode # client.close() #链接不断开,长链接
client端:接口
#coding=utf-8 __author__ = '药师Aric' ''' client端 长链接,短链接,心跳 ''' import socket import time host = 'localhost' port = 8083 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) #在客户端开启心跳维护 client.connect((host, port)) while True: client.send('hello world\r\n'.encode()) print('send data') time.sleep(1) #若是想验证长时间没发数据,SOCKET链接会不会断开,则能够设置时间长一点