我有一个通过 Internet 套接字 (UDP) 传输数据的程序。所以定义了 char 数组作为数据包。例如char packet1[] = 11
(header[2 digit]) + 192.168.100.158
(sender_IP[15 digit]) + 006
(TTL [3 digit])+... ( 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];
};
. 但我无法弄清楚该写什么而不是 buf
在这一行上sendto(s, buf, BUFSIZE, 0,(struct sockaddr *) &si_other, slen)
,因为buf
我知道需要是 char 。我需要 ASCII 表示的 IP 地址作为发送一些数据到sender_IP
address (inet_aton(sender_IP, &si_other.sin_addr)
。