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

时间:2017-07-15 19:42:27

标签: 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
        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允许我通过连接单独配置每个设备。我知道这意味着为每个连接提出一个单独的名称,但我不确定如何实现这一目标。到目前为止,即使连接了多个设备,双向通信仍然有效。一旦建立新连接,我就无法从服务器向每个系统发送唯一消息。

由于

奥利弗。

0 个答案:

没有答案