以下是我的简单服务器代码。
我想存储/打印任何客户端发送数据的地址。
例如,输出应为:
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)
答案 0 :(得分:-1)
抱歉打扰了他们。
此处的解决方案:
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)