У меня есть программа, которая отправляет 88 байтов необработанных данных (не строки), используя NetworkStream.Read и NetworkStream.Write.
Байт номер 58 имеет значение 10 (новая строка). Поток экземпляра принимающей программы прекращает чтение после получения этого байта, действующего как ReadLine вместо Read для необработанных данных.
Сценарий последовательный, что когда я изменил его на чтение 32 байта за раз, он читал 32, а затем 26 (всего 58), останавливаясь на том же байте.
Это когда я запускаю два экземпляра программы на разных компьютерах, подключенных через Интернет, используя порт 21. Когда я запускаю оба экземпляра на одном компьютере, все 88 байтов принимаются без проблем.
Я буду использовать Network Monitor, чтобы увидеть, где теряются 30 байтов, но я подумал спросить здесь, есть ли предложения или кто-то сталкивался с подобной проблемой.
Редактировать: Вот код:
Вот код. Он читает данные из одного потока и записывает их в другой, работая в обоих направлениях:
`
class ProxyConnection
{
private NetworkStream clientStream;
private NetworkStream serverStream;
public ProxyConnection()
{
.. clientStream = tcpClient.GetStream();
serverStream = tcpServer.GetStream();
..}
private void RouteFromClientToServer()
{
Message message;
while (true)
{
try
{
message = ReadMessageFromClient();
ValidateMessage(message);
SendMessageToServer(message);
}
catch(IOException e)
{
Logger.getInstance().log(e.Message);
break;
}
}
}
private Message ReadMessageFromClient()
{
Message message = new Message();
message.bytes = new byte[MESSAGE_SIZE];
message.bytesCount = clientStream.Read(message.bytes, 0, MESSAGE_SIZE);
Logger.getInstance().log("Size ( " + message.bytesCount + " ) From Client");
return message;
}
private void SendMessageToServer(Message message)
{
serverStream.Write(message.bytes, 0, message.bytesCount);
Logger.getInstance().log("Size ( " + message.bytesCount + " ) To Server");
serverStream.Flush();
}
}