套接字收到不起作用后的Memcpy

时间:2017-06-02 03:03:46

标签: c sockets

我尝试通过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);

然而,当我在接收到结构元素后尝试打印时,会发生分段错误。我在发送之前和接收之后已经完成了缓冲区的打印,只是为了查看数据是否相同,它是,所以我不知道,我做错了什么。 任何帮助将不胜感激,并提前感谢!

1 个答案:

答案 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包含来自客户端程序的地址,它在服务器程序中无效