Java Socket连接报JVM_Bind错误 运行客户端端口自动加1问题咨询
问题根因
你最开始碰到的Address already in use: JVM_Bind报错,核心原因是之前调试时残留的服务端进程没有关闭,一直占用对应端口。
后续出现端口号加1、好像跑错程序的问题,是NetBeans的默认运行逻辑导致的:默认状态下,NetBeans Java项目会绑定一个默认主类,你点击顶部通用运行按钮时,不管当前打开编辑的是client.java还是server.java,都会运行项目预设的默认主类(也就是你的server类),所以你以为启动的是客户端,实际是又启动了一个服务端实例:
- 你第一次启动服务端时,绑定的端口被存活进程占用
- 第二次误启动服务端时,如果端口写死就会报占用错误;如果你保留了
ServerSocket(0)的自动分配逻辑,系统会自动分配下一个可用端口,就会出现端口号比之前大1的现象。
你贴出的服务端、客户端代码本身逻辑没有问题,不存在语法或API使用错误。
解决方法
- 运行指定类时不要点顶部的通用运行按钮,右键点击对应Java文件,在弹出菜单中选择「运行文件」,就会单独执行当前类的
main方法,不会触发默认主类的运行。 - 每次调试前检查NetBeans底部的运行面板,关掉之前残留的服务端进程,避免多余进程占用端口。
- 如果还是出现端口占用报错,可以打开Windows命令行执行
netstat -ano | findstr "目标端口号",找到占用端口的PID后在任务管理器关闭对应Java进程即可。
正常的运行流程为:右键运行server.java→ 复制控制台打印的端口号 → 替换client.java中Socket构造的端口参数 → 右键运行client.java,此时服务端控制台就会正常打印Client connected。
内容的提问来源于stack exchange,提问作者user16337485
相关产品推荐
相关产品推荐

