从多个客户端收到的python套接字读取数据

时间:2017-04-14 14:58:12

标签: python sockets distributed-system

我正在编写一个python程序(master.py)来读取从2个独立客户端收到的数据。这是代码示例:

master.py:

data_agg = ''
HOST = '172.31.31.207'
PORT = 50008
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(2)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(65535)
    data_agg += data
    if not data: break

data_arr = json.loads(data_agg.decode('utf-8'))
data_arr = sorted(data_arr)
print "Sorted attay: \n"
print data_arr

两个客户端具有以下代码:

HOST = '172.31.31.207'
PORT = 50008
s0 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s0.connect((HOST, PORT))
s0.send(sorted_data_string)
s0.close()

但是我只接收来自单个客户端的数据。从多个接收器到达的套接字读取数据的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您希望服务器处理多个客户端,可以将accept()置于循环中,并将新客户端添加到已连接客户端列表中。然后你可以读 - 写给每个客户。

HOST = '172.31.31.207'
PORT = 50008
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(2)
clients = []
while True:
    conn, addr = s.accept()
    clients += [{'conn':conn, 'addr':addr}]
    print 'Connected by', addr
    data_agg = ''
    while True:
        data = conn.recv(65535)
        if not data: 
            break
        data_agg += data
    data_arr = sorted(json.loads(data_agg.decode('utf-8')))
    print "Sorted attay: \n"
    print data_arr 
    conn.close()
s.close()

您可以使用thread改进上述代码,以便您可以同时处理多个客户端。您可以通过定义handle_client函数并在新线程上运行它来完成此操作。

while True: 
    conn, addr = s.accept()
    print 'Connected by', addr
    start_new_thread(handle_client, (conn,))