【发布时间】:2019-07-09 13:15:31
【问题描述】:
我有一个通过 Internet 套接字 (UDP) 传输数据的程序。所以定义了 char 数组作为数据包。例如。 char packet1[] = 11(标头[2 位])+192.168.100.158(发件人_IP[15 位])+006(TTL [3 位])+...(11192.168.100.158006...)。接收端根据数组的索引提取数据(如0-1为header,2-16为sender_IP)。
我的问题是,当我将 sender_IP 定义为 [2-16] 并且 IP 地址短于 15 位(例如 192.168.100.5)时,接收方会错误地提取数据。我的问题是,即使 IP 地址是 15 位或 14 位(不添加额外字符来定义 sender_IP 的字符串长度),如何确保正确提取 sender_IP?
我正在考虑创建一个结构类型并定义类似 `
struct packet {
char header[1];
char senderIP[15]
, TTL[2];
};
。但我不知道在这一行sendto(s, buf, BUFSIZE, 0,(struct sockaddr *) &si_other, slen) 上写什么而不是buf,因为我知道buf 需要是字符。我需要 ASCII 表示的 IP 地址作为发送一些数据到sender_IP 地址(inet_aton(sender_IP, &si_other.sin_addr)。
【问题讨论】:
-
1) 用空格填充它。 2) 终止它?
-
顺便说一句,buf 不必是 char*,它可以是指向结构或任何其他类型的指针,但由于差异和平台和编译器之间的打包和字节序。