pythonsocket程式設計之三:長連線、短連線以及心跳(轉藥師Aric的文章)

神棍先生發表於2017-10-25

長連線:開啟一個socket連線,收發完資料後,不立刻關閉連線,可以多次收發資料包。

短連線:開啟一個socket連線,收發完資料後,立刻關閉連線。

心跳:長連線在沒有資料通訊時,定時傳送資料包(心跳),以維持連線狀態。

在python裡,其實不用做那麼複雜的事情,心跳檢測在TCP協議層會自動維護,python只需要呼叫介面設定就可以了,直接上程式碼:

server端:

#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
`.encode())
    print(`send data`)
    time.sleep(1) #如果想驗證長時間沒發資料,SOCKET連線會不會斷開,則可以設定時間長一點


相關文章