我尝试通过TCP套接字发送结构数组,方法是将其作为字节数组(char *)发送,然后将其转换回接收端的原始结构类型。 / p>
结构包含照片的数据,如下所示:
struct photo{ //List that will store photo information
uint32_t id_photo;
char *file_name;
struct keyword * key_head;
struct photo * next;
};
然后我这样发送:
photolist p_list[photocount];//Photo count = nº of elements to be sent
for(int i = 0; i<photocount; i++){
p_list[i]=*aux;
p_list[i].key_head = NULL;
aux = aux->next;
}
//Sending list of photos to the new peer
buff = malloc(sizeof(photolist)*photocount);
memcpy(buff, p_list, sizeof(photolist)*photocount);
nbytes = send(fd, buff, sizeof(photolist)*photocount, 0);
最后我像这样收到它(数组的元素数量先前已成功接收):
buff = (char *) malloc(sizeof(photolist)*photosize);
nbytes = recv(sock_fd_server, buff, sizeof(photolist)*photosize, 0);
if(nbytes == -1){
perror("Reciving");
exit(-1);
}
photolist testlist[photosize];
memcpy(testlist, buff, sizeof(photolist)*photosize);
然而,当我在接收到结构元素后尝试打印时,会发生分段错误。我在发送之前和接收之后已经完成了缓冲区的打印,只是为了查看数据是否相同,它是,所以我不知道,我做错了什么。 任何帮助将不胜感激,并提前感谢!
答案 0 :(得分:1)
您尚未提供photolist的定义 但是如果你要发送像
这样的结构struct photo{ //List that will store photo information
uint32_t id_photo;
char *file_name;
struct keyword * key_head;
struct photo * next;
};
从客户端到服务器并在服务器上访问file_name
它将无法正常工作,因为file_name包含来自客户端程序的地址,它在服务器程序中无效