如何通过tcp套接字接收struct并输出到文件?我有一个结构,这是一个包,我试图通过套接字发送它,在客户端接收它,并写入文件。我使用一个空指针作为缓冲区来存储文件数据
到目前为止,我有
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));
假设<code>packet_size</code>类似于
const size_t packet_size = 2048;
上面引用的代码可能会分配足够大的东西来包含数据包
,但数据
指针没有初始化,并且在分配中也没有正确考虑。
在你的情况下我会做什么:
为每个数据包
分配一个固定大小的缓冲区,如下所示:
struct packet {
const size_t packet_size = 2048;
int id;
std::array<unsigned char,packet_size> data;
};
套接字地址结构 地址结构 说明 sockaddr_un UNIX通信域套接字地址 sockaddr_in IPv4套接字地址 sockaddr_in6 IPv6套接字地址 sockddr_un struct sockaddr_un { sa_familly_t sun_family; char sun_path[]; } sockaddr_in /* 在头文件<netinet/in
我正在尝试用套接字从客户端向服务器写入一个结构。 结构是: 这两个程序(服务器、客户机)的结构是相同的,并且这两个程序的结构是相同的。 客户端程序: 结构R*r; 马洛克.. ...(用数据填充结构) write(socket_fd,(void*)r,size of(R)); 服务器程序: 结构R*r; 马洛克.. read(client_fd,(R*)r,size of(R)); 这不是将结构从
问题内容: 我已经用套接字卡住了4h,我使用的方式是只有一个应用程序作为客户端和服务器,一旦客户端连接, 它将与新客户端一起打开theard,并等待消息。 一旦消息发送到服务器,客户端将收到响应,该部分正在正常工作。 客户专区的一部分: 服务器支持2条消息,第一条是“列表”,发送一条命令是“获取值”。 如果客户端将请求命令“列表”,它将运行以下命令:有一个“服务器/客户端”,它正在发送请求并接收一
我转向你,在这件事上我一直把头撞在墙上。 我正在做一个小的socket编程,我可以看到当我把它放出来。println(“…”)while循环之前的代码行(in.readLine())它工作正常,但我需要它位于循环内部。 说清楚一点,我没有看到任何错误。我只是看不到此应用程序的客户端显示文本。它看起来好像在工作,但事实并非如此。此外,我也不控制该应用程序的客户端,它由通过TCP连接到此套接字侦听器应
socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!
问题内容: 我想使用能够发送和接收文件的套接字和C / C ++语言实现在Linux上运行的客户端-服务器体系结构。有没有可以简化此任务的库?有人可以举个例子吗? 问题答案: 最可移植的解决方案是读取文件,然后以循环方式将数据写到套接字中(同样,接收文件时也采用另一种方法)。您可以在该缓冲区中分配一个缓冲区,并从该缓冲区中将其分配到您的套接字中(您也可以使用和,这是套接字特定的写入和读取数据的方式