Python:如何识别从中接收数据的套接字?
情况:服务器接收连接的客户端,并等待它们发出请求 问题是:当客户端连接时,服务器为其创建的套接字被分配变量clientsocket。当客户提出请求时,他们将从大厅中的客户列表中删除。但是,如果两个客户端连接但不发出请求,则最后一个要连接的客户端将成为变量clientsocket 问题的影响:如果连接的第一个客户端决定发出请求,则变量clientsocket将从大厅列表中删除。但是,clientsocket将不是指第一个客户端,而是指第二个或最后一个要连接的客户端。因此,当第二个用户发出请求时,会生成一个错误,说明clientsocket无法从大厅中删除,因为它不再存在于大厅列表中。与此同时,客户机1仍然如此 下面是我所说的代码片段:Python:如何识别从中接收数据的套接字?,python,sockets,Python,Sockets,情况:服务器接收连接的客户端,并等待它们发出请求 问题是:当客户端连接时,服务器为其创建的套接字被分配变量clientsocket。当客户提出请求时,他们将从大厅中的客户列表中删除。但是,如果两个客户端连接但不发出请求,则最后一个要连接的客户端将成为变量clientsocket 问题的影响:如果连接的第一个客户端决定发出请求,则变量clientsocket将从大厅列表中删除。但是,clientsocket将不是指第一个客户端,而是指第二个或最后一个要连接的客户端。因此,当第二个用户发出请求时,会
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.recv512但有没有办法确定是哪个套接字发送了这个消息
尝试过谷歌搜索,但我认为没有人有这个问题。我希望这不是太具体。我相信其他人可能也想确定发送数据的套接字 反复使用全局可见的clientsocket是一个即将发生的意外。你应该把你的代码改成使用i-那也是一个套接字 data=i.recv512,但有没有办法确定套接字发送了什么 这个
就像我说的,我就是那个插座 反复使用全局可见的clientsocket是一个即将发生的意外。你应该把你的代码改成使用i-那也是一个套接字 data=i.recv512,但有没有办法确定套接字发送了什么 这个
就像我说的,我就是那个插座 有人认为在i.recv512中生成clientsocket=i是一个解决方案吗?是的,我已经将代码缩短为clientsocket=i。谢谢你的回答。有人认为在i.recv512中生成clientsocket=i是一个解决方案吗?是的,我已经将代码缩短为clientsocket=i了。谢谢你的回答。它提供了信心,你是说我应该在使用套接字发送数据时像我一样引用客户机吗?您能否详细说明一下clientsocket将如何成为一个即将发生的意外事件?我知道根据请求速度的不同,变量经常会被另一个套接字覆盖,但它是否会造成意外不更改或其他情况的风险?@Xeon如果您的代码是单线程的,那么实际上一切都可以工作。但是没有必要过度使用全局变量,只需使用i并将其作为参数传递。谢谢,我一定会看看我是否可以做到。@cnicutar为什么假设clientsocket是全局变量?这可能只是一个函数的一部分,它应该是。@奇怪的是,即使它不是全局的,我仍然认为它是过度使用的:OP应该直接使用I。你是说,每当我使用套接字发送数据时,我应该像我一样引用客户机吗?您能否详细说明一下clientsocket将如何成为一个即将发生的意外事件?我知道根据请求速度的不同,变量经常会被另一个套接字覆盖,但它是否会造成意外不更改或其他情况的风险?@Xeon如果您的代码是单线程的,那么实际上一切都可以工作。但是没有必要过度使用全局变量,只需使用i并将其作为参数传递。谢谢,我一定会看看我是否可以做到。@cnicutar为什么假设clientsocket是全局变量?这可能只是一个函数的一部分,它应该是。@奇怪的,即使它不是全局的,我仍然认为它是过度使用的:OP应该直接使用I。