我有一個通過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或任何其他類型的指針,但由於平臺和編譯器之間的差異以及封裝和字節順序,您幾乎不希望直接在套接字上發送結構。 –