我正在使用Python 3中基于套接字的应用程序,该应用程序将用于从中央Python服务器配置多个raspberry pi设备。 我设法编写了一些代码,允许多个设备同时连接,但我只能在最新的连接上从服务器发送数据。 这是代码:
import socket
import sys
import threading
import time
def manageClient(conn, addr):
def Ping(conn):
count = 0
while True:
conn.send(str(count).encode())
time.sleep(1)
count += 1
print(count)
conn.send(b'Welcome to the server. Type something and hit enter\n')
threading.Thread(target = Ping, args = (conn,)).start()
while True:
data = conn.recv(1024)
print(addr[0] + ': ' + data.decode())
reply = 'OK...' + data.decode()
if not data:
break
conn.sendall(reply.encode())
print('Disconnected from ' + addr[0] + ':' + str(addr[1]))
conn.close()
def addClient():
host = '192.168.1.24'
port = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket created')
try:
s.bind((host, port))
except socket.error as msg:
print('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
sys.exit()
print('Socket bind complete')
s.listen(10)
print('Socket now listening')
while True:
conn, addr = s.accept()
print('Connected with ' + addr[0] + ':' + str(addr[1]))
threading.Thread(target = manageClient, args = (conn, addr,)).start()
s.close()
threading.Thread(target = addClient).start()
我希望能够同时拥有多个用户,但是GUI允许我通过连接单独配置每个设备。我知道这意味着为每个连接提出一个单独的名称,但我不确定如何实现这一目标。到目前为止,即使连接了多个设备,双向通信仍然有效。一旦建立新连接,我就无法从服务器向每个系统发送唯一消息。
由于
奥利弗。