C/Visual C - htons en sockets

 
Vista:

htons en sockets

Publicado por lanausee (11 intervenciones) el 10/05/2005 01:38:44
saludos compañeros. entiendo que al programar con winsocks a veces es necesario segun la documentacion que he leido, que se emplee la funcion htons. porque, que significa esta funcion, para que sirve?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:htons en sockets

Publicado por fernando.gomez (1603 intervenciones) el 10/05/2005 01:42:50
Hola. Escencialmente es por compatibilidad. ¿Recuerdas aquellas tarugadas sobre el "little endian" y "big endian"? Bueno, pues tiene que ver con algo por el estilo. Los sockets inicialmente fueron desarrollados para Unix de la Universidad de Berkeley (BSD). Dicha plataforma tenía como formato de arreglo de bits el "Big endian".

Al popularizarse los sockets y con el surgimiento y auge de los procesadores 80X86 de Intel (en formato "Little endian") se hizo necesario hacer compatible a dichas plataformas (p.e. Windows, Linux) con la tecnología de sockets original. Ahí es donde entre htons. Lo que hace esta función es convertir de formato Little Endian a Big Endian. Sólo sirve para eso, y se emplea para mantener una compatibilidad directa con los sockets originales de Unix BSD.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:htons en sockets

Publicado por chuidiang (677 intervenciones) el 11/05/2005 06:49:22
Completando un poco lo que dice Fernando, la función htons() y similares (htonl(), ntohs() y ntohl() ) son suficientemente listas y hacen la conversión sólo si es necesario.

Me explico. Si el entero ya está en Big Endian, la función no hace nada. Si está en Little Endian, lo convierte. Por ello es bueno que cualquier programa de socket llame siempre a estas funciones. De esta forma, el entero siempre circulará por red en formato Big Endian. También es bueno que cualquier programa que reciba el entero por red, llame a la función inversa ntohs(). De esta forma tendremos seguridad de que cualquier programa corriendo en cualquier micro se entenderá con cualquier otro programa corriendo en cualquier otro micro.

Por cierto, htons es abreviatura de "Hardware TO Network" , es decir, convierte el entero de formato hardware (little endian o big endian según el micro) a formato de red (big endian).

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar