如何获取java.net.HttpURLConnection正在使用的源端口?

如何获取java.net.HttpURLConnection正在使用的源端口?,java,Java,我使用java.net.HttpURlConnection或javax.net.ssl.HttpsURLConnection对象连接到http/https服务器。我的测试在某个时候失败了,因为很明显,所有的测试都耗尽了我本地机器上所有可用的端口。这些是持久的http连接,因此应该重用 我正在尝试一些方法来解决这个问题。但为了检查我的修复程序是否有效,我需要确保源计算机上的同一端口在随后的HttpURlConnection或HttpsURLConnection实例中得到使用。如何获取java.ne

我使用java.net.HttpURlConnection或javax.net.ssl.HttpsURLConnection对象连接到http/https服务器。我的测试在某个时候失败了,因为很明显,所有的测试都耗尽了我本地机器上所有可用的端口。这些是持久的http连接,因此应该重用


我正在尝试一些方法来解决这个问题。但为了检查我的修复程序是否有效,我需要确保源计算机上的同一端口在随后的HttpURlConnection或HttpsURLConnection实例中得到使用。如何获取java.net.HttpURLConnection正在使用的源端口?

您可以指定该端口作为HTTP连接的一部分,或者使用defaultone


无论哪种方式,您的URL对象都有此信息,您可以使用其方法查询此信息。

我没有看到任何方法允许在HttpURlConnection中绑定相同的本地端口或获取用于绑定的本地端口号。Java的Socket类中有一些方法允许您绑定同一个本地端口构造函数方法,我想是这样的。。。如果您想这样做,请检查Apache httpclient 4.x中的PlainConnectionSocketFactory,而不是Socket,因为这些httpclient有更方便的方法。

您用完了所有65535端口吗?显然是的。我正在处理可以存储数十万个对象的对象存储。如果没有持久连接,与这些对象交互很容易导致端口耗尽。这听起来像是糟糕的设计。当您正确地释放和关闭套接字时,它将变得可重用。关闭TCP套接字后,它将进入时间等待状态。默认情况下,它将保持此状态60秒,然后才可供重用。我同意有解决办法。但我试图理解为什么这里没有使用持久的http连接。验证连接是否持久的一种方法是确保几个不同的HttpUrlConnection对象使用相同的底层端口。即使如此,我也很难相信65k连接在60秒内完成。这就是目标端口。我正试图找出源端使用的端口。