私はソケットと一緒に苦労してOKの進歩を遂げましたが、私は問題にぶち込まれ続けています。サーバがリスニングのために、クライアントに戻ってデータをエコー、無限ループで実行さソケットを介した複数の順次通信の正しい手順は何ですか?
- :
は、それは通常、TCPクライアントとサーバを実装そこのチュートリアルがたくさんあります。
- クライアントはサーバーに接続し、メッセージを送信し、同じものを受信してからを返してから、を終了します。
私はそれを扱うことができます。しかし、同じ2つのマシン/プロセス間の順次通信では、何をすべきか、またはすべきではないかの詳細に誰も触れていないようです。
機能の一般的なシーケンスは、複数のメッセージを行うために呼び出しますが、実際の質問をするために、ここにいくつかの制約がある後に私は:
- 各イベントは、単一のメッセージになりますクライアント - >サーバー、および単一の文字列応答です。
- メッセージはかなり短く、たとえば100文字以下です。
- イベントは、5秒ごとに1というほど、比較的遅く発生しますが、通常はその半分以下です。
といくつかの具体的な質問:
- サーバが応答した後、接続を閉じる、または次の通信までの接続にハングアップしようとしているべきか?
- 同様に、クライアントは応答を受信した後に接続を閉じるか、接続を再利用しようとしますか?
- 閉じた接続(
close()
または何らかのエラーを通して)は、通信の終了またはオブジェクト全体の寿命の終了を意味しますか?- もう一度接続してオブジェクトを再利用できますか?
- 私はサーバーの同じポートでこれを行うことはできますか?
- または、
socket.socket()
への新しい呼び出しで別のソケットオブジェクトを再インスタンス化していますか?
- 「アドレス使用中」エラーを回避するにはどうすればよいですか?
recv()
がタイムアウトした場合、ソケットは再利用可能ですか、それとも放棄すべきですか?繰り返しますが、同じソケットオブジェクトで新しい接続を開始できますか、まったく新しいソケットが必要ですか?
2つのアプリケーションが同じ接続を数時間使用するのは現実的です。メッセージのギャップは1分以内ですか?このようなコミュニケーションは信頼できるものなのでしょうか、それとも頻繁に中断したりクリーンアップされたりしますか? 3.については、私は再接続する限り、クライアントで同じソケットを再利用できると言っていますか?私は、接続が落ちた後、再接続の準備のために 'settimeout()'しようとするたびに、ソケットが閉じられているのでJavaの例外(私はJythonを使用しています)を取得します。それが、私が失敗後に新しいソケットをすべて手に入れなければならないかもしれないと思った理由です。回答の一部が間違っていた。 –
新しいソケットを作成する必要があります。 – xubuntix
ああ、接続がなくなるときはいつも、 'self.socket = socket.socket()'と**再接続しているはずです。私は同じソケットで再接続しようとしていましたが、これはおそらく私が間違っていたところです。私はこれについて言及したチュートリアル、または**クライアント**側で複数の接続を処理する方法については何も知りません。私はコードを少し再構築し、まだ問題が残っていれば戻ってきます。今のところ私はこれに答えていると思います:) –