У меня есть два программного обеспечения, один из которых сервер, а другой - клиентский интерфейс.NetworkStream write not newlining if not thread slept
В моем сервере я беру и обработку запроса затем возвращает строку через метод, который я написал «ответ»
public static void reply(string buffer, NetworkStream stream)
{
stream.Write(Encoding.ASCII.GetBytes(buffer), 0, buffer.Length);
}
вопрос я имею, что, например, если бы я, чтобы сделать код ниже
for(int i = 0; i<5; i++){
reply("SOME REPLY", stream);
}
приведенный выше код будет писать случайные newlined строки обратно клиенту, как это:
SOME REPLY
SOME REPLYSOME REPLY
SOME REPLY
SOME REPLYSOME REPLYSOME REPLY
SOME REPLYSOME REPLY
SOME REPLY
SOME REPLY
Если бы я поставил 200 мс Thread.Sleep-вызов в forloop, он бы корректно набросал ответы. На стороне клиента ниже код, как мы читаем с сервера и печати на консоль:
Byte[] bytes = new Byte[256];
NetworkStream stream = endpoint.GetStream();
int i;
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
Console.WriteLine(System.Text.Encoding.ASCII.GetString(bytes, 0, i));
}
Здесь полезно использовать ['BinaryWriter'] (http://msdn.microsoft.com/en-us/library/yzxa6408 (v = vs.110) .aspx). Он записывает для вас длину байтов длины. –
Спасибо, я действительно пробовал делать «\ n» без успеха, но я не верю, что переключился на использование «writ» над «writeline». Ваше исправление отлично работает. – user2887749
Если вы находитесь в Windows, \ n нужно будет \ r \ n - особенно в .NET. См. Свойство Environment.NewLine. – t0yk4t