我怎样才能使用端口1025-5000的WinXP作为临时工?

如果您使用端口0而不是非零端口创buildTCP客户端套接字,则操作系统会为您select任何免费的临时端口。 大多数操作系统从IANAdynamic端口范围 49152-65535中select临时端口。 但是,在Windows Server 2003和更早版本(包括XP)中,根据bind()文档 ,Microsoft使用端口1025-5000作为临时范围。

我在同一个硬件上运行多个Java服务。 在极less数情况下,这个范围与我用于其他服务的知名端口相冲突(例如Jini发现端口4160)。 虽然很less见,但却造成了实际问题。 是否有任何简单的方法告诉Windows或Java为客户端套接字使用不同的端口范围? 微软的文档指出,我可以通过MaxUserPort TcpIPregistry设置来改变该范围的高端,但是我看不出改变低端的方法。

更新:我已经取得了一些进展。 看起来像微软有一个保留端口的概念,是短暂的端口范围的例外。 有一个registry设置 ,可以让你永久地改变这个,显然必须有一个API来做同样的事情,因为有一个数据结构 ,保留高/低值的保留端口范围,但我找不到实际的函数调用的任何地方。registry解决scheme可能工作,但现在我注意到这个API。

Update2:我接受了一个关于如何通过Windowsregistry执行此操作的ServerFault解决scheme。 我仍然喜欢通过API来做到这一点,但是现在我觉得我很满意。

Solutions Collecting From Web of "我怎样才能使用端口1025-5000的WinXP作为临时工?"

它不像使用操作系统支持临时端口那样优雅,但文档显示您应该能够指定一个端口供您的套接字绑定。 在所需范围的底部指定一个端口,如果使用该端口,则会引发异常,在这种情况下,增加端口并重试。 鉴于Windows不使用你想要的端口范围,不应该有很多的冲突。