Проблема программирования сокета C # [получаемый файл имеет другой хеш] - PullRequest
1 голос
/ 20 июня 2011

У меня есть программа сокетов, которая отправляет файл из клиента сокетов на сервер сокетов и создает файл на сервере

Нет проблем при отправке файла на сервер ... [Не повреждено]

Но

Я мой код: (Сервер прослушивает и получает данные)

this.buffer = new byte[1000000];
 this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None);

Таким образом, всегда 1000000 байтов поступает от клиента на сервер , который всегда имеет файл фиксированного размера, созданный на сервере, также больше, чем исходный файл.

самая нечеткая вещь - это файл MD5 хэши разные ... из-за этого фиксированного буфера, как я думаю

Моя проблема в том, как я не могу отправить файл на сервер с тем же MD5 Хэшем?

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Нет необходимости сходить с ума по буферу, вы можете прочитать его порциями. Вы также можете использовать MemoryStream для хранения всей собранной информации, пока вы ее получаете:

MemoryStream MemStream = new MemoryStream();
this.buffer = new byte[1024];

int BytesRead = this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None);
while (BytesRead > 0)
{
  MemStream.Write(this.buffer, 0, this.buffer.Length);
  BytesRead = this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None);
}
1 голос
/ 20 июня 2011

Я думаю, это может быть потому, что MD5 начинает создаваться со всего созданного вами буфера.Если длина данных составляет всего 50000 байт, а размер буфера равен 1000000, я предполагаю, что это создаст другие значения хеш-функции.

Если я правильно помню, метод receive возвращает int, который должен быть размером данных, которые вы получили.Вы можете создать новый байтовый массив и скопировать полученные данные в массив, размер которого точно соответствует размеру исходного файла.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...