现象:Socket编程时的高并发访问在Windows上会报错,java.net.BindException:Addressalreadyinuse:connect

原因:报错原因是socket的短连接关闭后会出现TIME_WAIT状态,这个状态在端口上多了的时候,那么这个端口就不允许再访问了。

可行的方式是将主机的TIME_WAIT参数的失效时间调低些。

解决方法:

使用regedit命令访问HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键并创建名为TcpTimedWaitDelay的新REG_DWORD值。将此值设置为十进制30,其为十六进制0x0000001e。该值将等待时间设置为30秒。停止并重新启动系统。缺省值:0xF0,它将等待时间设置为240秒(4分钟)。建议值:最小值为0x1E,它将等待时间设置为30秒。


MaxUserPort描述:确定在应用程序从系统请求可用用户端口时,TCP/IP可指定的最高端口号。如何查看或设置:使用regedit命令访问HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键并创建名为MaxUserPort的新REG_DWORD值。停止并重新启动系统。缺省值:无建议值:至少十进制32768。