通过套接字发送结构数组

时间:2018-11-22 06:51:35

标签: c linux sockets

如果我有一个数组数组怎么办。我可以通过套接字发送结构数组吗?结构大小将不断更新,并且我随时可以打印出结构的内容。我希望这是有道理的,我的解释可能不会清除。我的语法在某些方面肯定是不正确的,只是我认为它的摘要。我只需要一些指导。

这将向套接字发送结构数组。

void sendOpenMessage(int num0, int num1, int num2){

  struct openMessage{
     int num0;
     int num1;
     int num2

  };
  struct openMessage open[100];
  int i = 0;
  open[i].num0 = 1;
  open[i].num1 = 2;
  open[i].num2 = 3;  

  int length = sizeof(open);
  if(send(socket, &open[i], length, 0) == -1){
       fprintf(stderr, "Send() failed");
  }else{
      printf("Open message is being sent\n");
  }
  i++;
} 

这将接收结构并在消息中显示内容

  struct openMessage open[100];
  if(recv(clnSocket, &open, sizeof(open), 0) < 0){
      fprintf(stderr,"Recv() failed\n");
      printf("Error code: %d\n", errno);
  }

  //Get size of the current struct 
  //Print out the messages from the structs that have messages?
  void printStruct(struct openMessage open){
     for(int i = 0; i < sizeof(the struct); i++){
           printf("%d\n",open[i].num0);
           printf("%d\n", open[i].num1);
           printf("%d\n", open[i].num2);
     }
  }

1 个答案:

答案 0 :(得分:0)

首先,您需要阅读有关字节顺序和序列化的信息。

第二,length是整个数组的大小,因此当i为零时,您将发送整个数组,而当i为1时,您将发送除第一个元素外的所有元素。最后是垃圾,依此类推。 第三,在接收到您时,将在数组的sizeof(the struct)个成员之间进行迭代。您是否不想遍历整个数组?

您说the struct size will be updated continuously是指数组中元素的数量吗?您的结构具有固定的大小。

如果要发送可变数量的数据,即要发送一次具有一个长度而另一次具有另一个长度的数据,或者即使您要更新数组中的元素数动态地,那么您必须在套接字上发送该大小,并在数据之前发送它。首先发送大小,首先在接收端读取它,然后接收端将知道要读取多少数据,更重要的是,数据在何处结束,以便以后再有更多数据时,不会混在一起上。