[英]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.