StreamReader.ReadLine не работает через TCP при использовании \ r в качестве ограничителя строки
Когда я использую только\r
в качестве ограничителя строки,StreamReader.ReadLine()
метод не работает. Это работает, если я используюEnvironment.NewLine
, \r\n
или же\ra
(«а» - любой символ). Это ошибка? Та же проблема не возникает при использовании MemoryStream вместо NetworkStream. Какие обходные пути можно использовать, если я не могу изменить протокол?
Мой сервис
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
}