2014-01-28 73 views
0

我有客戶端和服務器來傳輸圖像。客戶端發送圖像二進制和服務器接收它們並存儲。我用buff向量來存儲二進制文件。已發送的字節數不等於C++ Socket中接收的字節數Prg

客戶端:

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() 

我剛纔展示瞭如何可以做到這一點。這將確保文件成功傳輸。

相關問題