Pregunta

Cuando envío un variable entera de un proceso a otro a través del zócalo, y después de imprimir el valor en el extremo recibido, el valor sigue siendo el mismo sin necesidad de utilizar ntohl / htonl, y luego hacer donde necesito utilizar estas funciones distintas de inicializar estructuras de toma de corriente. Entiendo big endian / litte. Pero, ¿por qué es necesario para convertir el puerto e IP nn para acoger orden de bytes / red cuando el valor sigue siendo el mismo. Por favor, explique en detalle cómo el entero se tranferred través de la red?

¿Fue útil?

Solución

Si desea que su programa sea portátil, a continuación, cada vez que envíe un número entero mayor que 1 byte en tamaño por la red, primero debe convertir a la red de orden de bytes usando htons o htonl, y el equipo receptor debe convertirlo para acoger orden de bytes usando ntohs o ntohl.

En su caso, la razón del valor sigue siendo el mismo es probablemente debido a que el equipo emisor y el equipo receptor son del mismo orden de bits. En otras palabras, el ordenador emisor y el equipo receptor que está trabajando son tanto poco endian (o big endian, cualquiera que sea el caso.)

Sin embargo, si desea que su programa sea portátil, no se puede confiar en que esto sea siempre el caso. Un día, por ejemplo, el equipo emisor puede ser un Intel x86, y el receptor puede ser un Sun SPARC, y luego su programa fallará si no se utiliza htons.

Otros consejos

Si desea enviar los datos de una máquina x86 o AMD64 a una máquina con un procesador PowerPC, en binario formato que da gusto ver que sus datos se encuentra con el "problema Nuxi" como el diferente procesadores tratan los números enteros de manera diferente y parecen cambiar los bytes. (En realidad no intercambiar los bytes -. Sólo trabajan con ellos en un orden diferente)

Cuando se trabaja en x86 o AMD64, el byte menos significativo es lo primero en la memoria (de esta manera se puede realizar la suma de menor a direcciones de memoria más altas). El PowerPC pone el byte más significativo en primer lugar en la memoria (de esta manera puede ordenar los números sobre la base de los bytes que vienen antes en la memoria -. Una especie de cadena y un tipo entero puede ser exactamente el mismo)

remaimns lo mismo porque en su arquitectura de red de la orden es el mismo que el orden nativo. Si nunca anticipa compilar el código para otra arquitectura se podría omitir las llamadas Hton / ntoh. Su código no sería entonces portátil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top