NetworkStream stream = socket.GetStream();
if (stream.CanRead)
{
while (true)
{
int i = stream.Read(buf, 0, 1024);
result += Encoding.ASCII.GetString(buf, 0, i);
}
}
TcpClient
上記のコードは、別のスレッドで実行中にメッセージを取得するように設計されています。Read
メソッドが -1 を返して、読み取るものがもうないことを示すまでは、メソッドは正常に動作します。代わりに、明らかな理由なしに実行中のスレッドを終了するだけです。デバッガーを使用して各ステップをトレースすると、その行の直後に実行が停止することが示されます。
try ... catch
また、あまり成功せずにカプセル化しようとしました。
何が原因でしょうか?
編集:試しました
NetworkStream stream = socket.GetStream();
if (stream.CanRead)
{
while (true)
{
int i = stream.Read(buf, 0, 1024);
if (i == 0)
{
break;
}
result += Encoding.ASCII.GetString(buf, 0, i);
}
}
@JonSkeetに感謝しますが、問題はまだあります。スレッドはそのread
行で終了します。
EDIT2:このようにコードを修正したところ、うまくいきました。
while (stream.DataAvailable)
{
int i = stream.Read(buf, 0, 1024);
result += Encoding.ASCII.GetString(buf, 0, i);
}
問題は単純だと思います。十分に考えていなかっただけです。これを見てくれてありがとう!