Multithreading Python套接字服务器,可以同时向多个客户端发送不同的数据

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

我正在使用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允许我通过连接分别配置每个设备。我知道这意味着要为每个连接使用一个单独的名称,但我不确定如何实现这一点。到目前为止,即使连接了多个设备,双向通信也能正常工作。一旦建立了新的连接,我就无法从服务器向每个系统发送唯一的消息

谢谢


奥利弗。

你已经做到了,除非
target
不是局部变量,它必须是局部变量。啊,对不起。我想我还不够清楚。多个客户端已经可以连接,但我希望在建立新连接后能够配置以前的连接。这是否可以通过创建连接实例而不是通过类来实现?您已经做到了,除非
target
不是局部变量,它必须是局部变量。啊,对不起。我想我还不够清楚。多个客户端已经可以连接,但我希望在建立新连接后能够配置以前的连接。这是否可以通过创建连接实例而不是通过类来实现?