2016-09-19 27 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

それは動作します、私はサーバーにメッセージを送信することができますし、サーバーがそれを受信しますが、私はクライアント側でメッセージを受信できません。 Btwは、テルネットクライアントで動作します。 – Fireship

+0

そして前にそこにあった データがない場合: 印刷 'エラー' それは無限に印刷を開始します – Fireship

答えて

0

、複数のストリームを監視し、あなたはそれのためにselect機能を処理して使用する必要があるすべてのストリームのリストを作成し、ユーザー入力を使用sys.stdin、あなたがチャットを期待するすべてのソケット用するselect機能を備えた方法がありますと。
チェックこの:https://docs.python.org/2/library/select.html
しかし、まだudpとなり、非同期チャットを行うための最善の方法は、それはあなたが実行してみたときに

+1

友人にありがとうございますが、サーバーの仕組みに問題がありました。サーバーは私のようにメッセージだけでなく、SAYやQUITのようなコマンドを受け取る。私が行ったのは、このコマンドを送信したTCPパケットに加えたもので、今は正しく動作します。非同期では、私はこの単語を正しく使用しているかどうかはわかりませんが、うまくいきました。 – Fireship

+0

OPはそれを受け入れることを選択しましたが、この回答はせいぜい誤解を招きます。双方向データフローの場合、TCPに* no *の要件があります。 TCPは完全に1つのパーティーにデータを送ることしかできません。ソケットは "返信メッセージを期待していません"。単方向データ転送にTCPを使用する理由があります。 UDPは常にそのための正しい解決策ではありません。 –

+0

あなたは正しいです、tcpは単方向転送を持つことができます。間違って申し訳ありません。実際に私は前に同じ問題を抱えていましたが、この方法はすぐに解決されました。 –

関連する問題