2024. május 3., péntek

Gyorskeresés

Útvonal

Cikkek » Számtech rovat

Bevezetés a hálózati kommunikáció programozástechnikájába

Legújabb írásomban a hálózati kommunikáció C-ben történő művelésébe próbálok betekintést nyújtani.

[ ÚJ TESZT ]

Bájtsorrend

Nem ejtettem szót eddig egy, a hálózati kommunikáció kapcsán kikerülhetetlen témával, ami az elküldött bájtok sorrendiségével foglalkozik. A különböző processzorok különféleképpen tárolják az adatokat (egy adott memóriacímhez relatívan), eltérő bájtsorrendet használhatnak, de kommunikálni ettől függetlenül tudniuk kell egymással. Ezért a hálózati kommunikációra definiáltak egy bizonyos bájtelrendezési sorrendet, melyet Network Byte Ordernek neveznek. Ebben a sorrendben a legalacsonyabb helyiértékű bájt van legelöl. Ezt az elrendezést hívják big endian sorrendnek is.
Ezzel szemben azonban bizonyos processzorok nem ezt az elrendezést támogatják, hanem az úgynevezett Host Byte Order elrendezést. Ezt hívják egyébként little endiannak is, és leginkább az Intel processzorokra jellemző a használata. Ebben az elrendezésben tehát a legnagyobb helyiértékű bájt van legelöl.
Lényeg a lényeg, a hálózati kommunikációra való előkészületkor a Host Byte Order szerinti adatainkat át kell rendezni Network Byte Order sorrendűvé.

A bájt szerinti rendezésekre használhatunk specifikus függvényeket: ntohs (), ntohl (), htons (), htonl (). A függvények nevében az első négy betű jelenti, hogy melyik típusról melyikre konvertálunk, például ntohs: network to host. Az utolsó betű pedig azt jelenti, hogy 16 bites számról vagy 32 bitesről van e szó. (s: short, 16bit; l: long, 32bit).
A visszatérítési értéke lesz a függvénynek maga az átkonvertált cím, paraméterként pedig a konvertálandót kell megadnunk.
Az átalakításokat abban az esetben is el kell végezni, ha a mi processzorunk éppenséggel Network Byte Ordert használ, hiszen legtöbbször hordozható kódot igyekszünk előállítani!


Forrás: https://www.ibm.com

A cikk még nem ért véget, kérlek, lapozz!

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.