2016-09-19 19 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可以有單向傳輸。對錯誤感到抱歉。其實我之前也有同樣的問題,而且這個方法很快就解決了,所以我貼了相同的。 –