2017-05-11 19 views
-1

私は初心者ですが、ソケットプログラミングのC#開発者です。C#でサーバソケットの状態を確認する方法はありますか?

私は何をしたいですか?サーバーソケットの状態を確認したいと思います。時には、私のサーバソケットは、このオプションは単にいくつかの理由で閉じ

new Socket(AddressFamily.InterNetwork, 
       SocketType.Stream, 
       ProtocolType.Tcp); 

によって作成された

(私はなぜ知らない... T_T)

だから、私は再び開きたいです私のクライアントが接続できるように私のサーバーソケットがダウンしている場合。

再オープンする方法はありますか?

+0

これまでに何を試みましたか? – MiGro

+0

私は、サーバソケットの状態をチェックするためのスレッドを作ることを考えています。サーバーがダウンしている場合、スレッドは自動的に再オープンしますが、この方法が正しいかどうかはわかりません。最初に、それをチェックするより良い方法があることを確認したい –

+0

なぜこれを行うでしょうか?クラックの上にペーパをしようとするのではなく、なぜソケットが最初に閉じられるのかを知るためにあなたの努力を注ぐべきではありませんか?これは、漏れを修正する時間を費やすよりもむしろ床をモップするための戦略を助けてくれるようなものです。 –

答えて

0

あなたのソケットがまだ開いているかどうかを定期的に調べるのではなく、ソケットが閉じられたときに起動するイベントにイベントハンドラをアタッチし、その瞬間を使用してソケットを開いて再開するなどです。それがなぜ終わらないのかという点では、接続処理ロジックがよく考えられ、適切にマルチスレッドであることを確認してください(または、スレッド化されたワーカーをあなたのために設定する非同期メソッドを使用してください)。次の接続の準備が整ったリスニング状態に正しく戻っていないため、ソケットが「閉じている」状況が発生する可能性があります。

一般的なパターンは、接続を受け入れ、可能な限り早くリスニングに戻り、別のスレッドまたは作業者に接続処理を渡すことです。これをしないで、接続を受け入れるのと同じスレッドコンテキストでクライアントを完全に処理しようとすると、クライアントが話を止めたり予期せず消えたりすると、ソケットが破棄されます。

本当に必要ですあなたの接続処理ロジックの詳細を参照して、この点に関して問題がないかどうかを確認してください。ソケットがどのように作成されたかのスニペットを投稿することは実際には十分ではありません

関連する問題