私のserver.pyファイルに次のコードがあります。クライアントからのデータの受信を待機しています。さらに、私はhttpライブラリを使用することはできません。唯一のソケットライブラリ:ソケットAPIを使用して基本的なHTTPサーバーを書く
def handle_client(conn, addr):
print ('New client from', addr)
x = []
try:
while True:
data = conn.recv(1024)
decoded_data = data.decode('utf-8')
# if "GET/" in data.decode('utf-8'):
# handle_client_get(conn)
# else:
if data:
print(data)
x.append(decoded_data)
else:
print(x)
break
finally:
print("in close now")
conn.close()
私が午前問題は、私は私だけ手動CTRL + C
たらprint(x)
文を達することができるということですが、クライアントを閉じます。それ以外の場合は印刷されません。
なぜそうですか。
ANSWER
あなたが送信されたデータが正しく受信されたように、クライアントに確認応答を送信する必要があります。
接続を終了し、タイムアウトを待つことはありません。 Expect: 100-continue
そして、あなたは、クライアント
もう一方の側でソケットが閉じられませんでした。受信側のチャンネルがもう一方の側でシャットダウンされた後にのみ、空のrecvが得られます。 – tdelaney
しかし、クライアントからデータが送信されない場合、どのように中断できますか? 接続がある限り、クライアントからデータが送信されることはありませんが、else文には到達できません。 – user3450754
より良い回答を得るには、プロトコルを定義する必要があります。より多くのデータを受け取る予定の時間枠はありますか?終了したら、サーバーは接続を開いたままにしていますか? telnetやsshなどのプロトコルの中には、数分または数時間のデータがないものもありますが、接続が有効であり、データのない期間が過ぎるとデータが増えます。 – dsh