我有一個非常頻繁地發送訊息的服務器端socket(它用新資料更新相同的訊息)。所述客戶端側被只要接收到訊息處理該資訊。
我的問題是,當客戶端正在處理訊息時,服務器端可能已經發送了一些訊息。
客戶端如何只接收最后一條訊息并丟棄所有待處理的包?
這是我用于客戶端的代碼。我non-blocking希望它能解決我的問題,但它沒有,所以我不知道現在是否需要它。
import select
import socket
import time
class MyClient:
def __init__(self):
self.PORT = 5055
self.SERVER = socket.gethostbyname(socket.gethostname())
self.client = self.connect()
self.client.setblocking(False)
def connect(self):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((self.SERVER, self.PORT))
return client
client = MyClient()
while True:
inputs = [client.client]
while inputs:
readable, writable, exceptional = select.select(inputs, [], inputs, 0.5)
for s in readable:
data = client.client.recv(2048)
print(data)
time.sleep(1)
uj5u.com熱心網友回復:
TCP 中首先沒有訊息的概念,這也意味著 TCP 不能有任何“最后一條訊息”的語意。相反,TCP 是一個位元組流。不能依賴send一側的單身人士recv和另一側的單身人士之間的 1:1 關系。
只能從流中讀取資料,不能跳過資料。跳過資料必須通過讀取資料并將它們扔掉來完成。要獲取最后一條訊息,應用程式級協議必須首先定義訊息的含義,然后應用程式邏輯必須讀取資料、檢測訊息邊界,然后丟棄除最后一條訊息之外的所有訊息。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/373209.html
上一篇:無法讀取c中的arp資料包
