最近、サーバーが接続を受け入れると思われる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回送信した後、サーバーはハングアップし続けます。誰も私がそれを防ぐ方法を教えてもらえますか?
send()およびrecv()がすべてのデータを一度に戻さないようにしてください。実際に送受信されたバイト数が返され、その数は指定した数より少なくなることがあります。 –