簡體   English   中英

從從多個客戶端接收的 python 套接字讀取數據

[英]Reading data from a python socket received from multiple clients

我正在編寫一個 python 程序 (master.py) 來讀取從 2 個獨立客戶端接收的數據。 這是代碼示例:

大師.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()

但是我只從一個客戶端接收數據。 從來自多個接收器的套接字讀取數據的正確方法是什么?

如果您希望您的服務器處理多個客戶端,您可以將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,))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM