使用TCP Client在Python中发送多条消息

时间:2014-08-20 23:36:55

标签: 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

        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()

1 个答案:

答案 0 :(得分:1)

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

此外,您正在实例化一个新线程,仅在循环外侦听客户端消息ONCE,因此您只能在第二次尝试时调用 thread_receive.start() ONCE要做到这一点,它可能会抛出一个错误,因为这个线程已经启动了。您必须为EACH客户端连接创建一个新线程,这意味着每次调用 thread_receive.start()之前都要调用 thread_receive = Thread(target = receiveInstruction)

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