2017-07-31 17 views
1

最近、サーバーが接続を受け入れると思われるpythonソケットサーバーをポート9777で受信し、クライアントに情報を送信できるようになりました。クライアントは受信したものを印刷します。しかし、私はいくつかのデータを送信した後、新しい接続を再初期化するまでサーバがハングすることがわかりました。この理由はそこにありそうだとすれば、私はデータを送信した後、Pythonソケットサーバーがハングアップしています

サーバーのコードを起こってからそれを防ぐことができる方法です:ワードデータが文字列である場合

import socket 
import sys 

host='0.0.0.0' 
port=9777 
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(10) 
c,a=s.accept() 
while True: 
    command=raw_input('[input>] ') 
    if 'data' in command: 
     c.send('continue') 
     data=c.recv(1024) 
     print data 
    else: 
     continue 

コードは、データのみを送信します。クライアントのコードは次のとおりです。

import socket 
import sys 

host='192.168.0.13' 
port=9777 
while True: 
    try:  
     s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
     s.connect((host,port)) 
    except: 
     continue 
    while True: 
     d=s.recv(9999) 
     print d 
     s.send('received') 

私の目標は、サーバーとクライアント間の接続をセットアップすることです。私はサーバーがwhileループでユーザーからの入力を受け入れ、入力をクライアントに送ることができるようにしたい。クライアントは情報を受け取ることができなければなりません。クライアントが情報を受信すると、サーバーに応答が送信されます。その後、ユーザーはプログラムを終了するまでサーバーにデータを送信し続けることができます。ただし、クライアントにデータを1回送信した後、サーバーはハングアップし続けます。誰も私がそれを防ぐ方法を教えてもらえますか?

+0

send()およびrecv()がすべてのデータを一度に戻さないようにしてください。実際に送受信されたバイト数が返され、その数は指定した数より少なくなることがあります。 –

答えて

0

私は多分あなたはこの絵enter image description here

host='localhost'にし、この問題でのご滞在には多分あなたのIPアドレスがある場合host='localhost'
host='0.0.0.0'host='192.168.0.13'を変更する必要があり、それが正常に動作します私のコンピュータでこのコードを試してみてくださいこのコマンドを実行しようとするネットワーク内の他のデバイスと同じipconfig /renew

関連する問題