如何通过tcp套接字接收结构并输出到文件?我有一个结构,这是一个数据包,我试图通过套接字发送它,并在客户端接收它并写入该文件。我正在使用void指针作为存储文件数据的缓冲区
到目前为止我已经
了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);
}
答案 0 :(得分:0)
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;
};