write toe tic tac socket multiple getoutputstream example clients java sockets network-programming jvm

toe - socket java ip



¿Cómo se implementan los sockets en JVM? (3)

Java es de código abierto, por lo que puede tomar el código fuente para un examen profundo de la clase a su propio ritmo.

Como inicio y respuesta rápida a su pregunta, esto es lo que encontré en un análisis muy rápido:

private native void socketConnect(InetAddress address, int port, int timeout)

Así que, sí, se incluye una lib nativa y supongo que es una biblioteca C ++.

Hay varias implementaciones (SSLSocket, PlainSocket, etc.)

La fuente en línea de JDK7 está aquí : S No estoy seguro de cuán actualizado está

He usado mi IDE para navegar por el código fuente que viene con cada instalación de JDK.

Captura de pantalla de IDE que muestra la fuente de Socket http://img83.imageshack.us/img83/5358/socketimpfv3.png

Quiero saber cómo se implementan los sockets en la máquina virtual de Java.

  • ¿Hay una biblioteca nativa incluida?
  • Y si, ¿es una biblioteca C?

¿Dónde puedo encontrar información sobre este tema? El tutorial oficial de Java sobre redes no me ayuda allí.

Algunos enlaces interesantes ayudarían.

Actualización: ¿Hay alguna información oficial proporcionada por Sun?

¡Gracias por adelantado!

Editar Encontré una prueba, marcó mi respuesta como la correcta. Gracias a Oscar, ¡esa fue la pista perfecta para mí! ¡GRACIAS!


Probablemente utilizando las llamadas al socket del sistema-V expuestas por la plataforma subyacente, por ejemplo, el sistema-V en Unix, WinSock en Windows. La especificación solo dicta cómo debe comportarse una máquina virtual, por lo que los implementadores son libres de hacer lo que deseen.


En la guía de red de Java 1.4.2 , se proporciona una información interesante:

Los detalles de implementación ...

... que no necesitas saber, a menos que subclases SocketImpl / DatagramSocketImpl. Cada * objeto Socket tiene un SocketImpl / DatagramSocketImpl subyacente que se conecta con el código nativo. Las clases Impl implementan dos métodos para admitir opciones:

void setOption (int optID, Object val) arroja SocketException; El objeto getOption (int optID) arroja SocketException;

eso se parece mucho a C Estos métodos actúan como pegamento a los métodos nativos y garantizan la seguridad del tipo antes de invocar los métodos nativos.

Así que creo que está comprobado: Java usa bibliotecas nativas para sockets.