如果我有一个数组数组怎么办。我可以通过套接字发送结构数组吗?结构大小将不断更新,并且我随时可以打印出结构的内容。我希望这是有道理的,我的解释可能不会清除。我的语法在某些方面肯定是不正确的,只是我认为它的摘要。我只需要一些指导。
这将向套接字发送结构数组。
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);
}
}
答案 0 :(得分:0)
首先,您需要阅读有关字节顺序和序列化的信息。
第二,length
是整个数组的大小,因此当i
为零时,您将发送整个数组,而当i
为1时,您将发送除第一个元素外的所有元素。最后是垃圾,依此类推。
第三,在接收到您时,将在数组的sizeof(the struct)
个成员之间进行迭代。您是否不想遍历整个数组?
您说the struct size will be updated continuously
是指数组中元素的数量吗?您的结构具有固定的大小。
如果要发送可变数量的数据,即要发送一次具有一个长度而另一次具有另一个长度的数据,或者即使您要更新数组中的元素数动态地,那么您必须在套接字上发送该大小,并在数据之前发送它。首先发送大小,首先在接收端读取它,然后接收端将知道要读取多少数据,更重要的是,数据在何处结束,以便以后再有更多数据时,不会混在一起上。