我目前正在使用登录服务器,该服务器可以将用户数据返回到请求该数据的计算机。但是,它根本不发送任何数据。以下是我认为可能导致错误的部分代码:
服务器
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 4876))
s.listen(1)
conn, addr = s.accept()
print('Connected: ' + addr[0])
data = conn.recv(1024)
print(addr[0] + ': ' + data)
data = data.split(' ')
if data[0] == 'rquser':
print(addr[0] + ' requested user ' + data[1])
users = open(read_settings()['local']['user_file'], 'r')
users = json.load(users)
user_found = (False, 0)
print(addr[0] + ': searching... ')
for x in range(len(users)):
if users[str(x)]['username'] == data[1]:
user_found = (True, x)
break
if user_found[0]:
print(addr[0] + ': User found. ')
conn.sendall(users[user_found[1]])
conn.close()
客户
try:
if read_settings()['local_users']:
us = open(read_settings()['local']['user_file'], 'r')
return json.load(us)
else:
if uid is None:
raise ValueError
else:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((read_network_settings()['server_ip'], 4876))
message = 'rquser ' + uid
s.sendall('rquser ' + uid)
s_recv = ''
data = s.recv(64)
while True:
data = s.recv(64)
s_recv += data
if not data:
break
s.close()
return s_recv
except IOError, socket.error:
return None
我已使服务器打印出状态,但是它似乎在Connected: 127.0.0.1
处停止
我是python套接字的新手,我在项目上几乎没有成功。但是我不明白为什么它不起作用
答案 0 :(得分:2)
不是将服务器绑定到'127.0.0.1'
,而是使用''
作为传递给bind
的元组的第一个元素:
s.bind(('', 4876))
''
将侦听任何试图在LAN上连接的IP。
此外,您应该在服务器中创建一个while
循环,该循环在每次迭代时都尝试接收连接,如果已经接收到连接,请对客户端对象执行以下操作:
while True:
try:
conn, addr = s.accept()
except:
pass
else:
#do something with conn