发送的字节不等于C 套接字PRG中的接收字节
Sent Bytes is not equal to Received Bytes in C++ Socket Prg
我有客户和服务器运输图像。客户端发送图像二进制,服务器接收并存储。我使用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()
我只是展示了如何实现这一目标。这将确保该文件成功传输。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- std::当在256字节边界上写入整数时,流的奇怪行为
- 当比特(而不是字节)的顺序至关重要时的持久性
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 字节到位运算符重载C++
- 在java中读取c++字节的位字段
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 字节真的是最小可寻址单元吗
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 如何将原始字节附加到 std::vector?
- 发送的字节不等于C 套接字PRG中的接收字节