私はTcpClient Asynchronous WPFプロジェクトをリクエストしています。クライアントが切断されたときにソケットが切断されたためにネットワークが失われたときに、私はいくつかのコードを書きました。正常に動作し、ソケットがサーバー側でも取り外されたり取り外されたりすると、イベントが発生したり、クライアントのステータスを切断するための例外は発生しません。私は多くのサイトでこの問題について見てきましたが、どこでも人々はSocket.Poll
メソッドを使用すると言っていましたが、私の場合は動作しません。 SelectMode.SelectRead
は、クライアントが接続または切断されたときに常にtrueを返すので、私は何か別の方法を見つけることはできません。ネットワークが切断されたために切断されたTcpClientを見つけるための問題
クライアントのソケットが抜かれた/ネットワークアクセスが非同期モードで失われたときを見つける方法を知るためにここに質問を投稿しています。私はどのように動作していないか、次のコードで試しました。
void CheckSocketStatus()
{
try
{
while (true)
{
System.Threading.Thread.Sleep(1000);
if(!mobjClient.Client.Poll(0,SelectMode.SelectWrite))
{
break;
}
}
}
catch(SocketException soex)
{
}
}
誰かが私を助けることを望みます。
ご回答いただきありがとうございます。どのように私はこの2日間最後に作業している。私はそれが動作するときにあなたに返信します。 –
私が考えたことの1つですが、少し危険です。ポートスキャナに似たテクニックを使用することです。おそらく、確立された接続に影響を与えないが、もう一方のエンドポイントが応答する特定のパケットを送信できる方法をTCP標準で見つけることは可能です。あなたはあなたのチェックメソッドでこのプローブを作ることができます。しかし、私は何がわからないのですか?すでに確立されている接続を介してSYNパケットを送信すると発生します。このようなパケットは、相手側のアプリケーション層には届かないはずです。私は確かにあなたが見つける解決策に興味があるでしょう。 – Andreas
今、私は正しいソリューションを見つけましたが、手動で管理する方法もあります。クライアントとの接続が切断されると、サーバー側では、関係者の接続も強制的に閉じています。 –