Python:如何识别接收数据的套接字?

时间:2013-09-25 07:44:32

标签: python sockets

情况:服务器接收连接客户端,并等待它们发出请求。

问题:当客户端连接时,服务器为它们创建的套接字被分配了变量 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)但有没有办法确定哪个套接字发送了这个?

尝试谷歌搜索,但我认为没有人有这个问题。我希望这不是太具体。我确定其他人可能也想确定发送数据的套接字。

1 个答案:

答案 0 :(得分:1)

一遍又一遍地使用全局可见的clientsocket是一个等待发生的事故。您应该只更改代码以使用i - 这也是一个套接字。

  

data = i.recv(512)但有没有办法确定发送的套接字   此

就像我说的那样,i就是那个套接字。