Python存储客户端地址?
下面是我的简单服务器代码 我想存储/打印任何客户端发送数据的地址 例如,输出应为:Python存储客户端地址?,python,Python,下面是我的简单服务器代码 我想存储/打印任何客户端发送数据的地址 例如,输出应为: Connection from ('127.0.0.1', 61334) foo from ('127.0.0.1', 61334) Connection from ('127.0.0.1', 61335) bar from ('127.0.0.1', 61335) baz from ('127.0.0.1', 61334) qux from ('127.0.0.1', 61335) 有人叫我用dic
Connection from ('127.0.0.1', 61334)
foo from ('127.0.0.1', 61334)
Connection from ('127.0.0.1', 61335)
bar from ('127.0.0.1', 61335)
baz from ('127.0.0.1', 61334)
qux from ('127.0.0.1', 61335)
有人叫我用dict,但我不知道怎么用
import select
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('', 8888))
server_socket.listen(5)
print "Listening on port 8888"
read_list = [server_socket]
while True:
readable, writable, errored = select.select(read_list, [], [])
for s in readable:
if s is server_socket:
client_socket, address = server_socket.accept()
read_list.append(client_socket)
print "Connection from", address
else:
data = s.recv(1024)
if data:
s.send(data)
else:
s.close()
read_list.remove(s)
很抱歉打扰大家
解决方案如下:
import select
import socket
#Global Variables
clientInfo={}
def storeClient(client_socket,address):
clientInfo[client_socket]=address
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('', 8888))
server_socket.listen(5)
print "Listening on port 8888"
read_list = [server_socket]
while True:
readable, writable, errored = select.select(read_list, [], [])
for s in readable:
if s is server_socket:
client_socket, address = server_socket.accept()
read_list.append(client_socket)
print "Connection from", address
storeClient(client_socket,address)
else:
data = s.recv(1024)
if data:
print data, "from: ", clientInfo[s]
s.send(data)
else:
s.close()
read_list.remove(s)
这里真正的问题是什么?为什么不能将ip地址存储为dict的密钥?你的观点是什么?我现在就知道了,更新了,谢谢。为什么你需要一个专门的方法呢?因为,我将在这个新方法下做更多的事情,并且可能会将它重命名为storeClientInfo。(适当)