0

我正在尝试通过 UDP 套接字发送结构,我收到了正确的 DRB_count 值但无法接收 KenbStar 的值。我究竟做错了什么?我正在使用同一台机器,在客户端和服务器中使用相同的端口环回 ip 127.0.01。

客户:

typedef struct tseTargetCellInformation{
   UInt8 DRB_count;                     
   UInt8 *KenbStar;
}tTargetCellConfiguration;

trecTargetCellConfiguration *rx_TargetCellConfiguration_str;

rx_TargetCellConfiguration_str = (trecTargetCellConfiguration*)malloc(sizeof(trecTargetCellConfiguration));

send_TargetCellConfiguration_str->DRB_count=1;
send_TargetCellConfiguration_str->KenbStar = (UInt8*) malloc(1);
send_TargetCellConfiguration_str->KenbStar[0]= 0x5b;

sendto(sd, (char *) (send_TargetCellConfiguration_str), sizeof(tTargetCellConfiguration), 0, (struct sockaddr *)&server, slen)

服务器:

typedef struct tseTargetCellInformation{
   UInt8 DRB_count;                     
   UInt8 *KenbStar;
}tTargetCellConfiguration;

rx_TargetCellConfiguration_str->KenbStar = (UInt8*) malloc(1);

recvfrom(sd, (char *) (rx_TargetCellConfiguration_str), sizeof(trecTargetCellConfiguration), 0, (struct sockaddr*) &client, &client_length);
4

2 回答 2

2

因为KenbStar是一个指针,所以您必须取消引用才能发送它指向的值或接收该值。否则,您只是发送和接收指针(即,不是指向的内容),这通常毫无意义(特别是如果客户端和服务器是不同的进程)。

换句话说,类似:

sendto(sd, (char *) send_TargetCellConfiguration_str->KenbStar, sizeof(UInt8), ...

recvfrom(sd, (char *) rx_TargetCellConfiguration_str->KenbStar, sizeof(UInt8), ...

然而,创建一个普通成员可能是最简单KenbStar的,就像DRB_count,除非你有一个特定的原因为什么它必须是一个指针。然后,您只需一次调用即可发送(和接收)整个结构。

于 2013-03-01T11:40:36.810 回答
0

您不能将指向一个内存空间的指针发送到另一个内存空间并期望它指向同一事物,尤其是当您尚未发送它所指向的内容时。由于大约十个其他原因,通过网络发送未编码的结构也是一个禁忌。您需要研究一些表示层,例如 XDR。

于 2013-03-01T11:42:56.337 回答