【问题标题】:Using TCP Client to send multiple messages in Python在 Python 中使用 TCP Client 发送多条消息
【发布时间】:2014-10-14 11:38:52
【问题描述】:

我有许多 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。我愿意:

def main():

    t = Thread(target=listenConnections)

    t.start()

main()

【问题讨论】:

    标签: python multithreading tcp client tcpserver


    【解决方案1】:

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

    此外,您正在实例化一个新线程以仅在循环外侦听一次客户端消息,因此您只能在第二次尝试时调用 thread_receive.start() ONCE为此,它可能会引发错误,因为该线程已经启动。您必须为每个客户端连接创建一个新线程,这意味着每次调用 thread_receive = Thread(target=receiveInstruction),然后再调用 thread_receive.start()。。 p>

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

    【讨论】:

    • 谢谢Juca! Licíiiiiinio
    猜你喜欢
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多