これには多くの情報があります。私はそれをすべて読んで約束しました。Socket.PollとSocket.Connectedを希望どおりに動作させることができません
私はラップトップで動作するソケットサーバープログラムを持っています。私は最大50のラップトップを同じLAN経由でサーバーにワイヤレス接続しています。クライアントラップトップはすべて(Socket.ConnectAsyncを使用して)サーバーに接続し、サーバーは非同期メソッドも使用してデータを送受信します。サーバーは、接続されているクライアントのラップトップの一覧をユーザーに表示します。この一覧は正確で、クライアントが切断して接続するたびにピックアップされます。しかし、クライアントラップトップは、特定の状況下でサーバーへの接続が失われたようなことはありません(サーバープログラムがクラッシュした場合、サーバーのラップトップがスタンバイモードになるなど)。接続5秒ごとに次のように:
bool SocketConnected(Socket s)
{
bool part1 = s.Poll(0, SelectMode.SelectWrite);
bool part2 = (s.Available == 0);
if (!part1 && part2)
{
return false;
}
else
{
return true;
}
}
私はすべてのselectmodes(SelectWrite、SelectRead、SelectError)を使用して試してみましたが、別のタイムアウト値を使用して試してみました。私はこれらの操作の後にs.Connected値をチェックしてみましたが、接続状態を判断するために他の方法を試してみましたが、何も信頼できる結果を出すものはありません!!私は、5秒ごとにダミーの情報を送ってsをチェックすることで、私が望む結果を達成できると思います。しかし、そうした後に接続しましたが、実際には各ラップトップが既に多くのデータをサーバーに送信しているので、 。どんな助けも大歓迎です!ありがとう