接收结构并在套接字编程中写入文件

Receiving a Struct and Writing to file in socket programming

本文关键字:文件 编程 套接字 结构      更新时间:2023-10-16

如何通过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(&current->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(&current->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;
};