在python中异步接收TCP数据包

时间:2016-09-19 15:56:56

标签: python sockets tcp

我有一个即时消息应用程序,客户端用python编写。

连接到服务器的代码:

def connect(self, host, port, name):
    host = str(host)
    port = int(port)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))
    s.send('CONNECT:' + name)
    print s.recv(1024)

    return s

然后s将存储在self.socket中。

这是从服务器接收tcp数据包并将其打印到命令行的函数。

def chat(self):
    while True:
        data = self.socket.recv(4096)
        if not data:
            pass
        else:
            print data

所以在我看来它应该接收服务器发送和打印出来的所有内容,但它不会发生。谁知道如何将它变为现实?

1 个答案:

答案 0 :(得分:0)

有一种select函数监视多个流的方法,列出你需要处理的所有流,并为其使用select函数,用户输入使用{{1和你希望聊天的所有套接字 检查一下:https://docs.python.org/2/library/select.html
但是,进行异步聊天的最佳方法是使用sys.stdin,它会正常工作