[英]Python: How to identify socket from which data is received?
情況:服務器接收正在連接的客戶端,並等待它們發出請求。
問題:當客戶端連接時,服務器為它們創建的套接字將分配給變量clientocket 。 當客戶提出請求時,他們將從大廳中的客戶列表中刪除。 但是,如果兩個客戶端連接但不發出請求,則最后一個連接的客戶端將成為變量clientocket 。
問題的影響:如果連接的第一個客戶端決定發出請求,則將從大廳列表中刪除變量clientsocket。 但是,clientsocket不會引用第一個客戶端,而是第二個客戶端(或要連接的最后一個客戶端)。 因此,當第二個請求發出請求時,將生成一條錯誤消息,指出不能從大廳中刪除clientocket,因為它不再存在於大廳列表中。 同時,客戶端1仍然這樣做。
這是我正在談論的代碼片段:
rlist,wlist,xlist = select.select([Listeningsocket]+ Connection_List,[],[])
for i in rlist:
if i == Listeningsocket:
clientsocket,address = Listeningsocket.accept()
Connection_List.append(clientsocket)
continue
else:
try:
data = i.recv(512)
except IOError:
data = ""
if data:
clientsocket = # <--- UPDATE CLIENT WITH CORRECT SOCKET
Request_Type = str(data.decode())
如您所見,我需要做的是確保當我接收數據時,發送數據的clientocket變為變量clientocket,而不是最后一個連接的變量。
data = i.recv(512),但是有什么方法可以確定哪個套接字發送了此消息?
嘗試使用谷歌搜索,但我認為沒有人遇到這個問題。 我希望這不是太具體。 我確定其他人也可能想要確定發送數據的套接字。
一遍又一遍地使用全局可見的clientsocket
是一種等待發生的事故。 您應該只更改代碼以使用i
這也是一個套接字。
data = i.recv(512),但是有什么方法可以確定哪個套接字發送了此消息
就像我說的, i
就是那個插座。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.