c# で StreamReaderクラスのReadLine(). を使ったTCP/IP通信の強制終了のさせ方
C#でStreamReaderクラスのReadLine()を使ってTCP/IP通信を行っています。
public NetworkStream netStream;
public StreamWriter serverWriter = null;
public StreamReader serverReader = null;
netStream = server.GetStream();
serverReader = new StreamReader(netStream, Encoding.UTF8);
serverWriter = new StreamWriter(netStream, System.Text.Encoding.GetEncoding("shift_jis"));
// スレッド内の処理
lock (this) {
while (true) {
try {
string message = reader.ReadLine();
if (message != null) {
// 受信データの内容を解析
PerseData(message);
}
else {
result = false;
break;
}
}
catch (Exception e) {
if (IsKill) {
result = false;
break;
}
}
}
}
このReadLine()はTimeout値を設定していませんので、データが来るか、それともクライアントからのDisconnectが来るまで終了しません。
これだと、クライアントが異常終了してしまう、または通信ができない状態になると、ReadLine()から永久に抜けられなくなります。
そこで、クライアントからではなく、自身でReadLine()を抜ける正攻法というのをご存知の方おられますでしょうか?以前Timeout値を設定して行っていたのですが、Timeout値だと一度だけしかきかないので別の方法を探しております。