[解決済み] サーバーソケットからのクライアントの切断を即座に検出する。
2023-04-15 23:11:51
質問
クライアントがサーバーから切断されたことを検出するにはどうすればよいですか?
私は以下のコードを
AcceptCallBack
メソッドにあります。
static Socket handler = null;
public static void AcceptCallback(IAsyncResult ar)
{
//Accept incoming connection
Socket listener = (Socket)ar.AsyncState;
handler = listener.EndAccept(ar);
}
からの接続が切れたことをできるだけ早く発見する方法を探す必要があります。
handler
ソケットから切断されたことをできるだけ早く発見する方法を見つける必要があります。
試してみました。
-
handler.Available;
-
handler.Send(new byte[1], 0, SocketFlags.None);
-
handler.Receive(new byte[1], 0, SocketFlags.None);
上記のアプローチは、サーバーに接続しているときに、サーバーが切断されたときに検出したい場合に動作しますが、動作しません。 がサーバーであり、クライアントの切断を検出したい場合。
どんな助けでも感謝します。
どのように解決するのですか?
ソケットが切断されたことを知らせるイベントはないので、許容できる頻度でソケットをポーリングする必要があります。
この拡張メソッドを使用すると、ソケットが切断されたことを検出するための信頼性の高いメソッドを持つことができます。
static class SocketExtensions
{
public static bool IsConnected(this Socket socket)
{
try
{
return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0);
}
catch (SocketException) { return false; }
}
}
関連
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] VS2017/2015 で .xproj ファイルを開く方法
-
[解決済み] gacutil.exeはどこですか?
-
[解決済み] .NET Framework 4 マルチターゲティングパックがアンインストールできない
-
[解決済み] 権限 '*' を持つ SSL/TLS の安全なチャネルを確立できませんでした。
-
[解決済み] terminationGracePeriodSeconds not
-
[解決済み] .net の OOM 問題を解決する必要があります。
-
[解決済み] ソケットAPIのaccept()関数はどのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] WPFで角丸ボタンを作成する/作るには?
-
[解決済み] リファレンスの追加にSystem.Web.Mvcが表示されないのはなぜですか?
-
[解決済み] ファイルまたはアセンブリ 'System.Data.SQLite' をロードできませんでした。
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] terminationGracePeriodSeconds not
-
[解決済み] 埋め込みリソーステキストファイルの読み方
-
[解決済み] RelativeSourceでWPFバインディングを使用するにはどうしたらいいですか?
-
[解決済み] System.Timers.Timer vs System.Threading.Timer
-
[解決済み] Visual Studioのコンパイルエラー "mismatch between processor architecture "を修正するにはどうしたらいいですか?
-
[解決済み] WPFのStaticResourceとDynamicResourceの違いは何ですか?