2014-07-16 2 views
0

http/https 서버에 연결하기 위해 java.net.HttpURlConnection 또는 javax.net.ssl.HttpsURLConnection 개체를 사용하고 있습니다. 내 테스트는 어느 시점에서 실패했습니다. 분명히 모든 것이 로컬 컴퓨터에서 사용 가능한 모든 포트를 모두 사용했기 때문입니다. 이들은 영구적 인 HTTP 연결이므로 재사용해야합니다.java.net.HttpURLConnection에서 사용중인 소스 포트를 얻는 방법은 무엇입니까?

나는 이것을 해결하기 위해 몇 가지 시도를하고있다. 그러나 내 수정 여부를 확인하려면 소스 컴퓨터의 동일한 포트가 HttpURlConnection 또는 HttpsURLConnection의 후속 인스턴스에 사용되도록해야합니다. java.net.HttpURLConnection에 의해 사용되는 소스 포트를 얻으려면 어떻게해야합니까?

+0

65535 개의 포트를 모두 사용 했습니까? O.o – Qix

+0

분명히 그렇습니다. 저는 수십만 개의 객체를 저장할 수있는 객체 저장소를 다루고 있습니다. 이러한 객체와 상호 작용하면 지속적인 연결이없는 경우 쉽게 포트가 고갈 될 수 있습니다. –

+0

그건 나쁜 디자인 같아. 소켓을 적절히 놓아서 닫으면 다시 사용할 수있게됩니다. – Qix

답변

0

HTTP 연결에 제공하는 URL의 일부로 포트를 지정하거나 defaultone이 사용됩니다.

어느 쪽이든, URL 개체에이 정보가 있으며 사용자는 getPort() 메서드를 사용하여이 개체에 대해 문의 할 수 있습니다.

+0

목적지 포트입니다. 소스 측에서 사용되는 포트를 찾으려고합니다. –

0

HttpURlConnection에서 동일한 로컬 포트 ​​바인딩을 허용하거나 바인딩에 사용되는 로컬 포트 ​​번호를 가져 오는 방법이 없습니다. Java의 Socket 클래스에는 동일한 로컬 포트 ​​(생성자 메서드와 bind())를 바인드 할 수있는 몇 가지 메소드가 있지만 ... Apache에서 PlainConnectionSocketFactory를 확인하십시오. 소켓보다 httpclient 4.x를 선택하십시오. HttpClient 더 편리한 방법이 있습니다.

관련 문제