インターネットソケット(UDP)を介してデータを転送するプログラムがあります。したがって、char配列はデータパケットとして定義されています。例:(char packet1[] = 11
ヘッダー[2桁])+ 192.168.100.158
(sender_IP [15桁])+ 006
(TTL [3桁])+ ...(11192.168.100.158006...
)。受信者は、配列のインデックスに従ってデータを抽出します(たとえば、0-1はヘッダー、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];
};
。しかし、私が知っているようにcharである必要があるので、buf
この行の代わりに何を書くべきかを理解できませんでした 。アドレスにデータを送信するため、ASCII表現のIPアドレスが必要です。sendto(s, buf, BUFSIZE, 0,(struct sockaddr *) &si_other, slen)
buf
sender_IP
(inet_aton(sender_IP, &si_other.sin_addr)