長鏈接:開啓一個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鏈接會不會斷開,則能夠設置時間長一點