Frage

Wenn ich eine ganzzahlige Variable von einem Prozess zum anderen durch die Buchse zu senden, und dann bei empfangenen Ende Druck den Wert, der Wert immer noch die gleiche, ohne ntohl / htonl, dann wo ich diese Funktionen andere als Initialisierung verwenden müssen Buchsenstrukturen. Ich verstehe leidet / Big Endian. Aber warum müssen wir Port- und IP-Nummern konvertieren, um Host / Netzwerk-Byte, wenn der Wert gleich bleibt. Bitte erläutern Sie ausführlich, wie die ganze Zahl über das Netzwerk tranferred ist?

War es hilfreich?

Lösung

Wenn Sie Ihr Programm sollen tragbar sein, dann jedes Mal, wenn eine ganze Zahl größer als 1 Byte in Größe über das Netzwerk senden, müssen Sie zuerst konvertieren Byte-Reihenfolge zu vernetzen htons oder htonl verwenden, und der empfangende Computer muss es konvertieren Host-Byte-Reihenfolge ntohs oder ntohl verwendet wird.

In Ihrem Fall ist der Grund, der Wert ist immer noch das gleiche ist wahrscheinlich, weil der sendende Computer und der empfangende Computer ist von dem gleichen Endian. Mit anderen Worten: Sie arbeiten der sendende Computer und der empfangende Computer mit beide Little-Endian (oder Big-Endian, was auch immer der Fall sein kann.)

Aber wenn Sie Ihr Programm soll tragbar sein, können Sie sich darauf nicht verlassen immer der Fall sein. Einen Tag zum Beispiel, der sendende Computer kann ein Intel x86, und der Empfang kann eine Sun SPARC sein, und dann wird Ihr Programm fehlschlagen, wenn Sie nicht htons verwenden.

Andere Tipps

Wenn Sie zum Senden von Daten von einer x86 oder amd64 Maschine in eine Maschine mit einem PowerPC-Prozessor mögen, in binär Format werden Sie schnell sehen, dass Ihre Daten, um das „Nuxi Problem“, wie die verschiedenen Begegnungen Prozessoren behandeln die ganzen Zahlen unterschiedlich und die Bytes zu tauschen scheinen. (Sie tauschen nicht eigentlich die Bytes -. Sie mit ihnen nur Arbeit in einer anderen Reihenfolge)

Wenn auf x86 oder amd64 arbeiten, das am wenigsten signifikante Byte zuerst kommt im Speicher (diese Weise können Sie zusätzlich von niedrigeren zu höheren Speicheradressen durchführen können). Der PowerPC setzt das höchstwertige Byte zuerst im Speicher (diese Weise können Sie Zahlen auf der Grundlage den Bytes sortieren, die zuvor im Speicher kommen -. Einen String zu sortieren und eine ganze Zahl sortieren kann exakt gleich sein)

Es remaimns gleich, weil auf Ihrer Architektur das Netzwerk, um die gleiche wie die nativen Ordnung ist. Wenn Sie noch nie Architektur für einen anderen Code antizipieren Kompilieren können Sie die Hton / ntoh Anrufe weglassen. Ihr Code würde dann nicht tragbar sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top