簡體   English   中英

Python:如何識別從中接收數據的套接字?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM