サーバーからクライアントを切断しようとしていますが、サーバーはまだ接続されていると認識しています。これに対する解決策が見つからず、シャットダウン、切断、およびクローズがすべて機能しません。
クライアントから切断してサーバーをチェックするためのコード:
クライアント:
private void btnDisconnect_Click(object sender, EventArgs e)
{
connTemp.Client.Shutdown(SocketShutdown.Both);
connTemp.Client.Disconnect(false);
connTemp.GetStream().Close();
connTemp.Close();
}
サーバ:
while (client != null && client.Connected)
{
NetworkStream stream = client.GetStream();
data = null;
try
{
if (stream.DataAvailable)
{
data = ReadStringFromClient(client, stream);
WriteToConsole("Received Command: " + data);
}
} // So on and so on...
コードのさらに下の方に、さらに書き込みと読み取りがあります。
皆様のお役に立てれば幸いです。
更新:スコープの問題があり、client.Connectedが読み取り後もtrueのままであると仮定して、refでTCPクライアントを渡そうとしました。何がうまくいかないのですか?
2回目の更新!!:
これが解決策です。のぞいてみて、それに基づいて、接続されているかどうかを判断します。
if (client.Client.Poll(0, SelectMode.SelectRead))
{
byte[] checkConn = new byte[1];
if (client.Client.Receive(checkConn, SocketFlags.Peek) == 0)
{
throw new IOException();
}
}