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

2024-06-01 08:40:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有许多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

因此,每次一个客户机连接时,他都能发送1条消息,而服务器读取它。但是当另一个客户机连接或同一个客户机试图发送另一条消息时,它就不起作用了。客户端非常可靠,我似乎不知道如何使用多次创建的连接来接收消息。这就是为什么我尝试多线程,但那也没用。顺便说一句,我也在一个线程上运行listenConnections。我知道:

^{pr2}$

Tags: 消息客户端message客户机portdefsocketthread
1条回答
网友
1楼 · 发布于 2024-06-01 08:40:05

首先,lstn.绑定((“IP”,端口))听我说(5) 方法只能在循环外调用一次。在循环内,您应该只调用(clnt,ap)=lstn.接受()。在

此外,您正在实例化一个新线程,只在循环外侦听do clients消息一次,因此您只能调用线程_接收.启动()一旦第二次尝试这样做,它可能会抛出一个错误,因为这个线程已经启动了。您必须为每个客户机连接创建一个新线程,这意味着每次调用thread_receive=thread(target=receiveInstruction),然后再调用线程_接收.启动()。在

另外,建议您对客户机和连接进行某种内部控制,以便能够管理从哪些客户机接收了哪些消息,或者应该将哪些消息发送给哪些客户机。在

相关问题 更多 >