发送的字节不等于C 套接字PRG中的接收字节

Sent Bytes is not equal to Received Bytes in C++ Socket Prg

本文关键字:字节 PRG 不等于 套接字      更新时间:2023-10-16

我有客户和服务器运输图像。客户端发送图像二进制,服务器接收并存储。我使用buff矢量存储二进制。

客户端:

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字符的情况下接收二进制文件?

运输二进制文件的简便方法是:

  • 当发送者发送文件时,在文件读取完成时关闭连接套接字
  • 发送在接收器方面已完成,直到连接为由发件人关闭。

示例:

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

我只是展示了如何实现这一目标。这将确保该文件成功传输。