StreamReader.ReadLine non funziona su TCP quando si utilizza \ r come terminatore di riga

Quando uso solo \r come terminatore di riga, il metodo StreamReader.ReadLine() non funziona. Funziona se uso Environment.NewLine , \r\n o \ra (“a” è qualsiasi carattere). è un insetto? Lo stesso problema non si verifica quando si utilizza MemoryStream anziché NetworkStream. Quali soluzioni alternative posso utilizzare se non riesco a modificare il protocollo?

Il mio servizio

 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(); 

Il mio cliente

 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 } 

Ho risolto il problema con il mio metodo ReadLine

 public static class StreamReaderExtensions { public static string ReadLineSingleBreak(this StreamReader self) { StringBuilder currentLine = new StringBuilder(); int i; char c; while ((i = self.Read()) >= 0) { c = (char)i; if (c == '\r' || c == '\n') { break; } currentLine.Append(c); } return currentLine.ToString(); } } 

Penso che dovresti usare \n come carattere di nuova linea.