2010-01-18 3 views
8

SocketImplFactory의 javadoc에서는, 「소켓 구현을 작성하는 소켓 팩토리를 변경하는 것으로, 어플리케이션은 로컬 방화벽에 적절한 소켓을 작성하도록 (듯이) 스스로를 구성 할 수있다」라고 언급하고 있습니다.java.net.SocketImplFactory의 작성

그러나 문제의 방화벽에 연결하려면 실제 연결을 수행하기 위해 실제 소켓이 필요합니다. 대체 된 기본 SocketImplFactory를 사용하여 실제 소켓을 얻는 방법은 무엇입니까?

java.net.PlainSocketImpl 및 java.net.SocksSocketImpl은 Sun의 Java에서 사용할 수 있지만 JVM간에 이식성있는 방식으로이를 수행 할 수있는 방법이 있습니까?

+0

좋은 질문입니다. (단지 가변적 인 통계를 싫어하지 마십시오.) –

+0

아마도 JNI를 사용하여 로컬 방화벽을 구성 할 수 있습니까? – Pindatjuh

답변

0

에 연결하기 위해 소켓을 만들고을 호출하기 전에 setSocketImplFactory을 호출하십시오.

+1

소켓이 끊어 지거나 즉시 연결되지 않으면 좋지 않습니다. –

+2

그러나 SOCKS (각 터널링 된 연결에 대해 방화벽에 대해 하나의 TCP 연결이 필요한 경우)와 같이 방화벽에 대한 다중 연결이 필요한 경우에는 작동하지 않습니다. 팩토리를 설정하기 전에 java.net.Socket을 생성 한 다음 기본 SocketImpl 클래스를 추출하고 리플렉션을 사용하여 향후 더 많은 인스턴스를 생성 할 수 있습니다. 그것은 분명히 해킹으로 분류 될 것이지만, 그것은 VM들 사이에서 이식 될 수있는 합리적인 기회가있는 것으로 보인다. – Dolda2000

1

이 설명서의 배경에 대한 약간의 정보가 있습니다. here

+0

감사합니다. 그렇지만 링크가 맞았습니까? 이 버그 보고서는 SocketImpls와 관련된 DNS 이름 확인과 관련이 있습니다. – Dolda2000