Я изучал, как использовать TcpClients в C# в течение последних нескольких дней, и смог отправлять строки (сообщения) по tcp. Сегодня я решил попробовать отправить текстовый файл (т. Е. Клиент получит файл и напишет его в ту же папку). Он работал, за исключением одной проблемы: после сообщения есть TON нулевых байтов. Вот что я имею в виду:Множество лишних байтов при отправке файла через TCP
Подлинные содержимое текстового файла: http://i.imgur.com/UCO3jvL.png
Получено содержимое текстового файла: http://i.imgur.com/6vucz40.png
Я посмотрел на размер полученного файла, а длина была 65536 символов. Я знаю, что максимальный размер TCP-пакета составляет 65535, поэтому то, что я думаю, является чем-то в моем коде, заставляет его использовать максимальный размер пакета, а не только необходимую ему сумму.
Вот мой код с сервера, который отправляет файл клиенту:
if(message.Contains("getFile"))
{
byte[] fileBytes = File.ReadAllBytes("text.txt");
stream.Write(fileBytes, 0, fileBytes.Length);
}
Вот мой код клиента, который получает файл с сервера и записывает его на диск:
if(command.Contains("getFile"))
{
byte[] readBuffer = new byte[client.ReceiveBufferSize];
int data = stream.Read(readBuffer, 0, readBuffer.Length);
File.WriteAllBytes("file.txt", readBuffer);
}
его не о ТСР вообще я думаю, насколько велик ваш 'client.ReceiveBufferSize'? вы напишете столько байтов в свой файл –
Клиент.RecieveBufferSize должен быть установлен так же, как длина файла, если я не ошибаюсь? – rrrrrrrrrrrrrrrr