Hirdetés

Új hozzászólás Aktív témák

  • Janos250

    őstag

    válasz Dißnäëß #14902 üzenetére

    A websocket a fizikai és a http (vagy egyéb) között van. Persze ez elég nagyjábóli megközelítés. A neten a kommunikáció IP alapon történik, viszont például ugyanazon a gépen egyszerre több program is használhatja a netet, pl. több böngésző is lehet újra megnyitva.
    Ezért nem elég, hogy egy szerver csak a cél IP címét adja meg, meg kell hozzá adni még egy 2 bájtos egyedi azonosítót is, hogy a válasznál lehessen tudni, hogy melyik alkalmazásnak kell továbbítani az üzenetet. Ez a plusz 2 bájt a port. Amikor egy böngésző elküld egy kérést egy szervernek, akkor küld hozzá egy port számot is, amit a küldő gép határoz meg úgy, hogy olyat választ, amit ugyanazon a gépen másik alkalmazás éppen nem használ. Ezt az IP+port együttest, mint socketot kezeli egy egység. Tehát pl. ESP32-n: Ha WEB szervert használsz, az kapcsolatot tart egy alacsonyabb szinttel, ami olyan elérést ad, mintha pl. soros port lenne. Lehet rá írni, lehet róla olvasni. Ez a szint egy socketban adja tovább a kérést egy alacsonyabb szintnek. Ez a nem profi rendszereknél gyakran az lwIP szabad felhasználású egység. Ez aztán összerakja a továbbítandó csomagot (legalábbis egy részét), és beteszi egy memória részbe. Utána szól a hardvert legalacsonyabb szinten kezelő résznek, hogy ott van ebben a tárolóban egy csomag. Az fogja, átmásolja a hardver
    saját tároló területére, és utasítja a hardvert, hogy küldje el.
    Ebben a csomagban már benne van, hogy a választ melyik socket (IP+portot kezelő egység) részére kell visszaküldeni. A hardver még ehhez a saját MAC címét hozzáadva, egy adott MAC címre küldi, amit az ARP nevezetű rész határoz meg. Ezt úgy teszi, hogy egy mindenki számára szóló üzenetben kérdezi az összes, ugyanazon a madzagon lévő gépet, hogy ez az IP cím kié. Ha senkié, akkor a routernek küldi. A user által használt legalacsonyabb szint a socket szokott lenni, azaz megadott szisztéma szerint összekészítesz egy csomagot, és azt adod át neki. ESP32-n én nem használom, mert a serializált szint kezelése sokkal egyszerűbb, de gyakorlatilag ez socket szintű programozás, csak megúszom a csomag összekészítésének a melóját.

Új hozzászólás Aktív témák