使用TCP客户端在Python中发送多条消息

使用TCP客户端在Python中发送多条消息,python,multithreading,tcp,client,tcpserver,Python,Multithreading,Tcp,Client,Tcpserver,我有许多TCP客户端需要向服务器发送多条消息。在服务器端,我写道: def listenConnections(): thread_recieve = Thread(target=recieveInstruction) while(1): lstn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # port = int(sys.argv[1]) # server port number

我有许多TCP客户端需要向服务器发送多条消息。在服务器端,我写道:

def listenConnections():
    thread_recieve = Thread(target=recieveInstruction)

    while(1):
        lstn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # port = int(sys.argv[1]) # server port number

        lstn.bind(('IP', PORT))


        lstn.listen(5)

        global clnt
        (clnt,ap) = lstn.accept()

       thread_recieve.start()

def recieveInstruction():
    while (1):
        try:
            message = clnt.recv(1024)
            print message
        except:
            pass
因此,每次一个客户机连接时,他就能够发送一条消息,服务器就会读取它。但是当另一个客户端连接或同一个客户端试图发送另一条消息时,它就不起作用了。客户端非常可靠,我似乎不知道如何使用多次创建的连接来接收消息。这就是我尝试多线程的原因,但也不起作用。顺便说一句,我也在线程上运行listenConnections。我有:

def main():

    t = Thread(target=listenConnections)

    t.start()

main()

首先,lstn.bind(('IP',PORT))lstn.listen(5)方法只能在循环外调用一次。在循环内部,应该只调用(clnt,ap)=lstn.accept()

此外,您正在实例化一个新线程,以便在循环外只侦听一次do clients消息,因此您只能调用线程\u receive.start()一次,第二次尝试此操作时,它可能会抛出错误,因为此线程将已启动。您必须为每个客户端连接创建一个新线程,这意味着在调用thread\u receive=thread(target=receivedirection)之前,每次都要调用thread\u receive.start()


还建议您对客户端和连接进行某种内部控制,以便能够管理哪些消息是从哪些客户端收到的,哪些消息应该发送给哪些客户端。

谢谢Juca!利西尼奥