У меня есть программа, которая отправляет 88 байт необработанных данных (не строку) с использованием NetworkStream.Read и NetworkStream.Write.
Байт номер 58 имеет значение 10 (новая строка). Поток экземпляра принимающей программы прекращает чтение, как только этот байт получен, действуя как ReadLine вместо Read для необработанных данных.
Сценарий согласуется с тем, что когда я изменил его на чтение 32 байтов за раз, он прочитал 32, а затем 26 (всего 58), останавливаясь на одном и том же байте.
Это когда я запускаю два экземпляра программы на разных машинах, подключенных через Интернет через порт 21. Когда я запускаю оба экземпляра на одной машине, все 88 байтов принимаются без проблем.
Я буду использовать сетевой монитор, чтобы увидеть, где теряются 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();
}
}