python socket 編程之三:長鏈接、短鏈接以及心跳

長鏈接:開啓一個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鏈接會不會斷開,則能夠設置時間長一點
相關文章
相關標籤/搜索