AMcoder - javascript, python, java, html, php, sql

տվյալների փոխանցում C վարդակից

Ես ունեմ ծրագիր, որը տվյալների փոխանցում է ինտերնետ վարդակների միջոցով (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):

24.05.2012

  • 1) լրացրեք այն բացատներով: 2) զրոյացնե՞լ այն: 25.05.2012
  • Ի դեպ, buf-ը չպետք է լինի char*, այն կարող է ցուցիչ լինել struct-ի կամ որևէ այլ տեսակի, բայց դուք գրեթե երբեք չեք ցանկանում ուղղակիորեն struct ուղարկել վարդակների վրայով, քանի որ պլատֆորմների և կոմպիլյատորների միջև տարբերությունները և փաթեթավորումը և endianness-ը կապված չեն: 25.05.2012

Պատասխանները:


1

Ուղարկեք IP-ները որպես 32-բիթանոց միջերես, կամ փաթեթավորեք տողը զրոներով, որպեսզի այն ունենա համապատասխան երկարություն, օրինակ. 192.168.100.005.

24.05.2012
  • Դեռևս կա ցանցային բայթերի պատվերի խնդիր։ ascii-ն խուսափում է դրանից: 25.05.2012
  • Ճիշտ. Դուք կցանկանայիք օգտագործել htonl() և ntohl(), եթե պատրաստվում եք ներդիրներ ուղարկել վարդակների վրա: 25.05.2012

  • 2

    օգտագործել limit-group-char like = "!!!" կամ «xxx» և հայտնաբերել այն՝ իմանալու համար, թե որտեղից սկսել հայտնաբերումը

    24.05.2012

    3

    Կա մի միջոց այն պատճենելու տեղական կառուցվածքում, որն ունի ևս մեկ բայթ՝ լրացուցիչ ավելացված NUL բայթի համար:

    struct packet *in;
    struct cooked_packet {
       char header[1];
       char sender_ip[1+ sizeof in->ip];
       char ttl[2];
       } this;
    
    this.header = in.header;
    strncpy(this.ip, in->ip, sizeof in->ip);
    this->ip [ sizeof this.ip -1] = 0;
    memcpy(this.ttl, ip->ttl, 2);
    

    UPDATE. Սա այս հազվագյուտ վայրերից մեկն է, որտեղ strncpy()-ը կարող է օգտակար լինել:

    24.05.2012
    Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..