\r
のみをラインターミネータとして使用すると、StreamReader.ReadLine()
メソッドは機能しません。 Environment.NewLine
,\r\n
または\ra
(「a」は任意の文字)を使用すると機能します。これはバグですか? NetworkStreamの代わりにMemoryStreamを使用する場合、同じ問題は発生しません。プロトコルを変更できない場合はどのような回避策を使用できますか?StreamReader.ReadLineがラインターミネータとして rを使用しているときにTCPで動作しません
マイサービス
Thread service = new Thread((ThreadStart)delegate
{
TcpListener listener = new TcpListener(IPAddress.Loopback, 2051);
listener.Start();
using (TcpClient client = listener.AcceptTcpClient())
using (NetworkStream stream = client.GetStream())
using (StreamReader reader = new StreamReader(stream))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.AutoFlush = true;
string inputLine = reader.ReadLine(); // doesn't work - freezes here
writer.Write("something\r");
}
});
service.Start();
私のクライアント
using (TcpClient client = new TcpClient("localhost", 2051))
using (NetworkStream stream = client.GetStream())
using (StreamWriter writer = new StreamWriter(stream))
using (StreamReader reader = new StreamReader(stream))
{
writer.AutoFlush = true;
writer.Write("something else\r");
var message = reader.ReadLine(); // doesn't work even
// if I remove the freezing point above
}
[StreamReader.ReadLine及びCR(http://stackoverflow.com/questions/1099953/streamreader-readline-and-cr)の可能な重複を解決し –