Multithreading Python套接字服务器,可以同时向多个客户端发送不同的数据
我正在使用Python 3开发一个基于套接字的应用程序,该应用程序将用于从中央Python服务器配置几个raspberry pi设备。 我已经设法编写了一些代码,允许多个设备同时连接,但我只能在最新连接上从服务器发送数据。 代码如下:Multithreading Python套接字服务器,可以同时向多个客户端发送不同的数据,multithreading,python-3.x,sockets,Multithreading,Python 3.x,Sockets,我正在使用Python 3开发一个基于套接字的应用程序,该应用程序将用于从中央Python服务器配置几个raspberry pi设备。 我已经设法编写了一些代码,允许多个设备同时连接,但我只能在最新连接上从服务器发送数据。 代码如下: import socket import sys import threading import time def manageClient(conn, addr): def Ping(conn): count = 0 w
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允许我通过连接分别配置每个设备。我知道这意味着要为每个连接使用一个单独的名称,但我不确定如何实现这一点。到目前为止,即使连接了多个设备,双向通信也能正常工作。一旦建立了新的连接,我就无法从服务器向每个系统发送唯一的消息
谢谢
奥利弗。你已经做到了,除非
target
不是局部变量,它必须是局部变量。啊,对不起。我想我还不够清楚。多个客户端已经可以连接,但我希望在建立新连接后能够配置以前的连接。这是否可以通过创建连接实例而不是通过类来实现?您已经做到了,除非target
不是局部变量,它必须是局部变量。啊,对不起。我想我还不够清楚。多个客户端已经可以连接,但我希望在建立新连接后能够配置以前的连接。这是否可以通过创建连接实例而不是通过类来实现?