/ Ako sa vysporiadať s viacerými časťami sieťových dát? - zásuvky, sieťové programovanie, sieťové protokoly, epoll

Ako sa vysporiadať s viacerými časťami siete chuncks dát? - zásuvky, sieťové programovanie, sieťové protokoly, epoll

Píšem sieťový klient pre daný protokolpomocou TCP a ja som mať niektoré filozofické problémy s celkovou architektúrou veci. Niekedy sa môže stať, že nemám všetky údaje o žiadostiach a možno budete musieť prečítať ešte pár bajtov, než sú momentálne k dispozícii. Predstavujem si, že niekedy môžem získať časť inej žiadosti po tej, ktorú chcem. Aký je obvyklý prístup v takýchto situáciách?

odpovede:

1 pre odpoveď č. 1

Sokety TCP sú orientované na Stream. To znamená, že ich čítanie je rovnaké ako čítanie súboru. Ak chcete odovzdávať diskrétne správy cez protokol TCP, budete musieť rozdeliť prúd údajov do správ, rovnako ako nový znak riadku rozdelí textové súbory do riadkov. Toto sa nazýva rámovanie.

Existuje mnoho spôsobov, ako to urobiť, tu sú niektoré príklady:

  1. Spočítavací prístup - každá správa je predpísanájeho dĺžkou. povedzte "5apple". Najprv ste čítali "5", potom viete, koľko bajtov je v tejto správe a že šiesty bajt bude prvým bajtom ďalšej správy. Môžete potrebovať niekoľko bajtov, ak sú niektoré vaše správy dlhé.

  2. Rozlišovací prístup - majú osobitný charakter(povedzme null) signalizuje koniec jednej správy a začiatok ďalšej správy. Potom jednoducho prečítajte zo zásuvky, kým nedosiahnete tento oddeľovač. Všimnite si však, že sa musíte uistiť, že tento znak sa nikdy nezobrazí V rámci vašich správ, pretože to všetko skrutkuje.

  3. Správy o pevnej veľkosti - podobné ako prvéprístup, len s implicitným dĺžkovým poľom. Uistite sa, že všetky vaše správy majú pevnú dĺžku (v prípade potreby použite polstrovanie), potom vždy prečítajte správny počet bajtov zo zásuvky.