05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

4.2 IP-Namen <strong>und</strong> IP-Adressen 177<br />

#include<br />

<br />

uint32_t htonl( uint32_t hostlong );<br />

uint16_t htons( uint16_t hostshort );<br />

uint32_t ntohl( uint32_t netlong );<br />

uint16_t ntohs( uint16_t netshort );<br />

6<br />

Die hton-Funktionen erhalten als Parameter eine Ganzzahl in Maschinendarstellung<br />

<strong>und</strong> wandeln diese in das Big-Endian-Format, also in die Netzwerkdarstellung.<br />

htonl() verarbeitet dabei einen vorzeichenlosen 32-Bit Wert,<br />

während htons() einen vorzeichenlosen 16-Bit Wert erwartet. Umgekehrt<br />

wandeln ntohl() <strong>und</strong> ntohs() einen 32-Bit bzw. 16-Bit Wert von der Netzwerkdarstellung<br />

in die Host Byte Order zurück.<br />

Mit Hilfe dieser Funktionen können wir ein kurzes Testprogramm entwickeln,<br />

welches uns über die Architektur des zugr<strong>und</strong>eliegenden Rechnersystems Auskunft<br />

gibt:<br />

In Beispiel 4.4 werden zunächst die beiden Hilfsvariablen host_val <strong>und</strong><br />

net_val vereinbart. Die beiden Variablen bieten Platz für je eine 16 Bit lange<br />

vorzeichenlose Ganzzahl.<br />

1 #include <br />

2 #include <br />

Beispiel 4.4. byteorder.c<br />

3<br />

4 int main( int argc, char *argv[] )<br />

5 {<br />

6 uint16_t host_val , net_val;<br />

7<br />

8 /* Initialisierung in Host Byte Order */<br />

9 host_val = 0x0001;<br />

10 printf( "Host Byte Order: host_val = %04x\n", host_val );<br />

11<br />

12 /* Umwandlung in Network Byte Order */<br />

13 net_val = htons( host_val );<br />

14 printf( "Network Byte Order: net_val = %04x\n", net_val );<br />

15<br />

16 /* Gilt "Host Byte Order = Network Byte Order"? */<br />

17 printf( "Ich bin ein %s-Endian -System.\n",<br />

18 ( host_val == net_val ) ? "Big" : "Little" );<br />

19 }<br />

8–10<br />

Danach wird der Variablen host_val der Wert 1 zugewiesen. Zur Verdeutlichung<br />

verwenden wir dabei die Hexadezimalschreibweise, aus der wir die

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!