情况:服务器接收连接的客户端,并等待它们发出请求。
问题:当客户端连接时,服务器为它们创建的套接字被分配了变量clientsocket。当客户提出请求时,他们会从大厅的客户列表中删除。但是,如果两个客户端连接但不发出请求,则最后一个连接的客户端将成为变量clientsocket。
问题的影响:如果第一个连接的客户端决定发出请求,则从大厅列表中删除变量 clientsocket。但是,clientsocket 将不是指第一个客户端,而是第二个(或最后一个连接)。因此,当第二个发出请求时,会生成一个错误,指出无法从大厅中删除 clientsocket,因为它不再存在于大厅列表中。同时,客户端 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())
如您所见,我需要做的是确保当我收到数据时,发送数据的 clientsocket 成为变量 clientsocket,而不是最后一个连接的。
data = i.recv(512) 但有什么方法可以确定是哪个套接字发送的?
尝试谷歌搜索,但我认为没有人有这个问题。我希望这不是太具体。我确定其他人可能也想确定发送数据的套接字。