我试图通过将其作为字节(char*(的数组发送到通过TCP插座发送结构数组,然后将其转回原始结构类型在接收端。
结构包含照片的数据,因此是:
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);
但是,当我尝试在接收到结构元素的元素上打印时,会发生分割故障。我在发送之前和接收后已经打印了缓冲区的打印,只是看看数据是否相同,所以我不知道,我在做错了什么。任何帮助将不胜感激,并提前感谢!
您尚未提供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包含客户端程序中的地址,因此在服务器程序中无效