C-插座后的memcpy无法正常工作



我试图通过将其作为字节(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包含客户端程序中的地址,因此在服务器程序中无效

最新更新