2012-02-28 20 views
0

私はC#で書かれた非同期ソケットサーバーを持っています。しばしば、私のユーザーは何の理由もなく接続が切断されていると不平を言う。ユーザーのコンピュータ上の他のインターネットアプリケーション(MSN、SKYPEなど)はうまく接続されているように見えるため、インターネット接続に問題はないようです。誰もがクライアントとサーバーの間の接続を確立する方法についての情報を提供することはできますか(頻繁な切断を防ぐことを意味します)、または切断問題を見つけることができる場所はありますか?ソケット接続の安定性

+0

タイトルに「C#」などのプレフィックスを付けないでください。それがタグのためのものです。 –

+1

申し訳ありませんが、私たちの仕事はどうなると思いますか?あなたの質問はあまりにも一般的です。どのようにして断線の可能性のある変数を推測できますか?あなたのコードを教えていただけますか?切断後の再接続はどうですか? – Jason

+0

特別なプロトコルがありますか?何らかの種類のping/keep-aliveメカニズムを持っていますか?あなたのサーバーは要求を十分に速く処理できますか? –

答えて

0

あなたはここでTCPについて話していると仮定します。アプリケーションのクライアントが使用するソケットライブラリは、SkypeやMSNに接続するのに使用するソケットライブラリとほとんど同じです。通常、切断の理由は、一方の当事者が(例えば、接続がしばらくの間アイドル状態になった後に)ソケットを閉じることである。接続を閉じるコードの場所を確認します。

2

複数のコンピュータ間でISPの割り当てられたIPアドレスを共有するネットワークアドレストランスレータ(別名「ホームルータ」、「ワイヤレスゲートウェイ」など)がここにあります。 NATは、アクティブなTCP接続と観察されたUDPセッションのためにip:portペアをどのように変換するかを追跡するアクティブな接続(「ポートマッピングテーブル」とも呼ばれる)のテーブルを保持します。ある期間、TCP接続を通過するトラフィックを監視しないと、メモリからポートマッピングをクリアすることが知られているいくつかのブランドのルータがあります。 MSN MessengerやSkypeなどのアプリは、クライアント、サーバー、およびその他の永続的接続の間で定期的に「keep alive」を送信することでこれを緩和します。これらのメッセージは両方向に送られます。

あなたは多くの情報を提供していないので、NATの問題は多数のうちの1つの可能性に過ぎません。

接続障害を診断する最善の方法は、で、ネットワークメッセージ(クライアントとサーバーの両方)、ソケットイベント、およびソケットAPIからのすべての戻り値の記録に大きく依存します。こうすることで、顧客が問題を報告した場合、彼は自分のログを送ることができます。また、比較のために対応するサーバーログを取得することもできます。その後、接続の切断元と接続のエラーの原因を診断できます。あなたのコードには、切断を引き起こす可能性の高いものがあります。