Python套接字未发送数据

时间:2018-10-02 12:48:58

标签: python sockets networking

我目前正在使用登录服务器,该服务器可以将用户数据返回到请求该数据的计算机。但是,它根本不发送任何数据。以下是我认为可能导致错误的部分代码:

服务器

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套接字的新手,我在项目上几乎没有成功。但是我不明白为什么它不起作用

1 个答案:

答案 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