最近工作中需要使用java+netty编写一个硬件设备模拟工具,这个工具会模拟很多不同编号的设备云链接服务器,每个设备需要占用两个端口。在调试程序的时候发现最多只能模式1800个设备,然后就提示:java.net.SocketException: No buffer space available (maximum connections reached?): bind。 按一个系统有65535个端口来算,应该不会这么少的!怎么说最少也能链接个20000台了。
maximum connections reached 原因
经过查询分析原因后才知道,原来是因为端口不够,因为使用的是windows系统,先在cmd下查询端口启用情况,使用命令:netsh int ipv4 show dynamicportrange tcp 来查看。
结果显示:协议TCP动态端口范围
启动端口 : 49152
端口数 : 16384
maximum connections reached解决方法
以管理身份运行命令窗口,然后通过命令 netsh int ipv4 set dynamicport tcp start=2000 num=63000 修改端口数。
其中:
start为起始端口号
num为端口数量
最后完全解决问题。因为在协议里端口使用两个字节存储的,所以端口的最大数量为65536。所以,单台机器上运行的程序占用的端口数不能超过这个数量。