2010-01-18 21 views
8

El javadoc para SocketImplFactory menciona específicamente que "Una aplicación, al cambiar la fábrica de sockets que crea la implementación de sockets, puede configurarse para crear sockets apropiados para el firewall local".Escribiendo un java.net.SocketImplFactory

Sin embargo, para conectarse al firewall en cuestión, uno necesitaría un socket real para hacer la conexión real. Con el reemplazo de SocketImplFactory predeterminado, ¿cómo se consigue obtener un socket real?

Sé que java.net.PlainSocketImpl y java.net.SocksSocketImpl están disponibles en Sun's Java, pero ¿hay alguna forma de hacerlo de forma portátil entre las JVM?

+0

Buena pregunta. (¿No odias la estática mutable?) –

+0

¿Quizás uno puede configurar el firewall local usando JNI? – Pindatjuh

Respuesta

0

Crea el socket para conectarse al firewall antes de llamando al setSocketImplFactory.

+1

No es bueno si el zócalo se rompe o no se puede conectar de inmediato. –

+2

Eso no funcionaría si es necesario que haya múltiples conexiones al firewall, como en el caso de SOCKS (que necesita una conexión TCP para el firewall para cada conexión tunelizada), sin embargo. Puede ser cierto que uno podría crear un java.net.Socket antes de configurar la fábrica y luego extraer la clase SocketImpl predeterminada de eso, y usar el reflejo para instanciar más de ellos en el futuro. Claramente se clasificaría como un hack, pero parece tener una posibilidad razonable de ser portátil entre máquinas virtuales. – Dolda2000

1

Hay alguna información sobre el pensamiento detrás de esta documentación here

+0

Gracias, pero ¿estás seguro de que tienes el enlace correcto? Ese informe de error solo se relaciona con la resolución del nombre DNS en el contexto de SocketImpls. – Dolda2000