我有一个通过Internet套接字(UDP)传输数据的程序。所以将char数组定义为数据包。例如。 (发送者IP [15位])+ 006
(TTL [3位])+ ...(11192.168.100.158006...
)。接收器根据阵列的索引提取数据(例如,0-1是标题,2-16是sender_IP)。通过套接字传输数据C
我的问题是,当我将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
地址(inet_aton(sender_IP, &si_other.sin_addr)
。
我将不胜感激所有建议。先谢谢你。
1)用空格填充它。 2)终止它? – wildplasser
顺便说一下,buf不一定是char *,它可能是一个指向struct或任何其他类型的指针,但由于平台和编译器之间的差异以及封装和字节顺序,您几乎不希望直接在套接字上发送结构。 –