2014-01-28 2 views
0

У меня есть клиент и сервер для переноса изображений. Клиент отправляет двоичный файл изображения, и сервер получает их и сохраняет. Я использовал вектор buff для хранения двоичного файла.Отправленные байты не равны полученным байтам в C++ Socket Prg

Client Side: Side

bytes_sent = send(socketfd, &fileSize, sizeof(fileSize), 0); 
bytes_sent = send(socketfd, &fileContents[0], fileSize, 0); 

Сервер:

bytes_received = recv(new_sd, &temp.imageSize, sizeof(temp.imageSize), 0); 
bytes_received = recv(new_sd, &buff[0], buff.size(), 0); 

      if(bytes_received < 0) 
       break; //Error 

      if(bytes_received == 0) 
       break; //Disconnect 

      img.write(&buff[8], temp.imageSize); 

печатных bytes_received и bytes_sent, результат:bytes_received = 8 + bytes_sent. Я открыл созданный образ с помощью vim (или блокнота), в начале изображения было добавлено /00/00/00/00/00/00/00/00 дополнительных символов. Чтобы решить эту проблему, я изменил buff [0] на buff [8], теперь полученное изображение работает хорошо.

Как я могу получить двоичные файлы без этих символов 8/00?

ответ

0

Легкий способ транспортировки двоичного файла является:

  • когда отправитель отправляет файл, закройте гнездо, когда чтение из файла завершено
  • отправки завершена в стороне приемника, не получают, пока соединение закрыт отправителем.

пример:

sender: 

file = open_file("file_name",read_binary) 
while(file.read(bytes)!=null){ 
send(toreceiver_socket,read_data); 
} 
file.close() 
toreceiver_socket.close() 


receiver 

file = open_file("file_name",write_binary) 
while(sender_socket_not_closed){ 
data = sendersocket.receive() 
file.write() 
} 
file.close() 

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

Смежные вопросы