接收结构并在套接字编程中写入文件
Receiving a Struct and Writing to file in socket programming
如何通过tcp套接字接收结构并输出到文件?我有一个结构,它是一个数据包,我试图通过套接字发送它,并在客户端接收它,然后写入文件。我使用一个空指针作为缓冲区来存储文件数据
到目前为止,我有
struct packet {
int id;
void* data;};
我可以访问客户端的id和int,但当我将数据写入文件时。文件似乎已损坏。
更新:
服务器打开了一个文件,将从文件中读取并将其制成数据包,然后将数据包发送给客户端。
客户端还会打开一个文件进行写入,当它接收到数据包时,它会将其写入文件。
服务器端:
current_packet = 0;
While(1)
{
struct packet *current = (packet *)malloc(packet_size+sizeof(int));
current->id = current_packet;
int read = fread(¤t->data, 1, packet_size, file);
//end of file
if(read == 0){
break;
}
int byte_write = write(conn, current,read + sizeof(int));
current_packet++;
}
客户端
current_packet = 0;
While(1)
{
struct packet *current = (packet *)malloc(packet_size+sizeof(int));
int read = read(conn, current, packet_size + sizeof(int));
//end of file
if(read == 0){
break;
}
int byte_write = fwrite(¤t->data, 1, read - sizeof(int), file);
fflush(file);
}
struct packet *current = (packet *)malloc(packet_size+sizeof(int));
假定packet_size
类似
const size_t packet_size = 2048;
上面引用的代码可能会分配足够大的内容来包含packet
,但data
指针没有初始化,在分配中也没有正确考虑。
在你的情况下我会怎么做:
为每个packet
分配一个固定大小的缓冲区,如下所示:
struct packet {
const size_t packet_size = 2048;
int id;
std::array<unsigned char,packet_size> data;
};
相关文章:
- C++编程从外部文本文件定义数组大小
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 以编程方式防止重命名或删除文件,但仍使其可写
- 在c++编程中的文件夹中创建文件
- 在C++模块化编程中,如何组装.cpp和.h文件
- 如何将 Cython 生成的模块从 python 导入到 C/C++ 主文件?(C/C++编程)
- Windows可以编程更改防火墙配置文件
- 音频编程 SDL - 如何使用 wav 文件在命令行中指定频率切割
- 是否可以以编程方式创建迷你转储文件而不会崩溃?
- 如何以编程方式查找从 html 引用的所有文件
- 如何以编程方式设置应用程序EXE文件的图标
- 如何在C / C++中以编程方式查找"Saved Games"文件夹?
- 如何以编程方式知道Adobe Reader完成了加载文件
- 通过编程C MFC查找目录中的文件列表
- 'Good'通过条目维护/更新/访问文件的编程形式
- 以编程方式馈送 KML 文件并检索/生成.png文件
- C 编程 fwrite 跳转到文件末尾
- 在Mac OS X中仅使用给定的文件路径以编程方式装载磁盘/卷
- 套接字编程:"接受:错误的文件描述符"
- C++中的多文件编程实践