2016-09-19 154 views
0

我有一个即时消息应用程序,客户端用python编写。连接到服务器在Python中异步接收TCP数据包

代码:

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 

所以在我的脑海里应该得到的一切服务器发送和打印出来,但它不发生的情况。任何人都知道如何实现它?

+0

当您尝试运行究竟是怎样呢? –

+0

它的工作原理,我可以发送消息到服务器和服务器接收它,但我不能接收消息在客户端。 顺便说一句,它与一个telnet客户端。 – Fireship

+0

并且之前有 如果不是数据: 打印'错误' 并且它开始无限打印 – Fireship

回答

0

没有与select功能的方式来监控多个流,让你需要处理和使用select功能它,用户输入使用sys.stdin和所有你期望聊天套接字的所有流列表用。
检查:https://docs.python.org/2/library/select.html
但还是要做的异步聊天将与udp的最佳方式,它会工作真的没事

+1

谢谢你的朋友,但问题在于我的服务器如何工作。与我一样,服务器不仅收到消息,而且收到带有命令的消息,如SAY或QUIT。我所做的只是将此命令添加到我发送的TCP数据包中,并且现在可以正常工作。作为异步,我不知道我使用这个词的权利,但它的工作原理,没关系,再次感谢你。 – Fireship

+0

当OP选择接受它时,这个答案充其量是误导。 TCP中有* no *要求用于双向数据流。 TCP完全有能力只有一方发送数据。套接字不会“期待返回消息”。为什么要使用TCP进行单向数据传输是有原因的; UDP不是*永远是正确的解决方案。 –

+0

你是对的先生,TCP可以有单向传输。对错误感到抱歉。其实我之前也有同样的问题,而且这个方法很快就解决了,所以我贴了相同的。 –