Ես ունեմ ծրագիր, որը տվյալների փոխանցում է ինտերնետ վարդակների միջոցով (UDP): այնպես որ կան սահմանված char զանգվածներ որպես տվյալների փաթեթներ: օր. char packet1[] = 11
(վերնագիր[2 նիշ]) + 192.168.100.158
(ուղարկող_IP[15 նիշ]) + 006
(TTL [3 նիշ])+... (11192.168.100.158006...
): Ստացողը տվյալները հանում է ըստ զանգվածի ինդեքսի (օրինակ՝ 0-1-ը վերնագիրն է, 2-16-ը՝ ուղարկողի_IP):
Իմ խնդիրն այն է, որ երբ ես սահմանում եմ sender_IP-ը որպես [2-16], և եթե IP հասցեն 15 նիշից կարճ է (օրինակ՝ 192.168.100.5), ապա ստացողը սխալ է հանում տվյալները: Իմ հարցն այն է, թե ինչպես կարող եմ համոզվել, որ sender_IP-ը ճիշտ կարտահանվի, նույնիսկ եթե IP հասցեն 15 նիշ է կամ 14 նիշ (առանց լրացուցիչ նիշ ավելացնելու 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, ինչպես գիտեմ: Ինձ պետք է IP հասցեն ASCII ներկայացման մեջ, քանի որ որոշ տվյալներ ուղարկեք sender_IP
հասցեին՝ (inet_aton(sender_IP, &si_other.sin_addr)
: