记DatagramSocket绑定端口socket.bind()报错java.net.SocketException: already bound

本文记录了解决在固定端口使用UDP接口时遇到的“端口已绑定”异常问题,通过调整DatagramSocket的初始化方式,避免了端口冲突,确保了服务的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段时间写一个 UDP 访问接口获取数据的功能。当然先鄙视下对方,非要走Socket,MLGJB搞得难受的很, 而本地受防火墙限制,不能使用随机端口,必须固定端口来接收数据, 由于本司做的是政务项目, 所以不能贴出生产代码, 有测试代码模拟下,
代码如下

 DatagramSocket	socket = new DatagramSocket();
 socket.bind(new InetSocketAddress(Integer.parseInt("4567")));

当这样创建Socket的时候,每次启动都报错:

 Exception in thread "main" java.net.SocketException: already bound
	at java.net.DatagramSocket.bind(DatagramSocket.java:376)
	at dubbo.test.T2.main(T2.java:12)

即已经绑定端口错误,最开始分析以为是并发执行。前面的没有释放,后面进进去了。 查阅很多资料, 各种方法,colse。discount都测试过,一直报这个错,
后面不注意看到有人说 new的时候必须设置null,不然会自动绑定端口, 随即测试:
改之前逻辑:
在这里插入图片描述

改之后逻辑

在这里插入图片描述

完美结局,虽然问题很小,按时确实分析错方向,搞了很久,而且我看网上都没有对应的方案,所以记录下。方便后人查阅

Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used. Please refer to the User Manual chapter on the daemon at https://docs.gradle.org/7.5/userguide/gradle_daemon.html Process command line: E:\AS2023\jbr\bin\java.exe --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED -Xmx8192M -Dfile.encoding=UTF-8 -Duser.country=CN -Duser.language=zh -Duser.variant -cp C:\Users\Chen Ting\.gradle\wrapper\dists\gradle-7.5-all\dwa490h3ro6flroizg9zas0ro\gradle-7.5\lib\gradle-launcher-7.5.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 7.5 Please read the following process output to find out more: ----------------------- FAILURE: Build failed with an exception. * What went wrong: java.net.BindException: Address already in use: bind * Try: > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Exception is: org.gradle.api.UncheckedIOException: java.net.BindException: Address already in use: bind at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:62) at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:41) at org.gradle.cache.internal.locklistener.FileLockCommunicator.<init>(FileLockCommunicator.java:51) at org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler.getCommunicator(DefaultFileLockContentionHandler.java:263) at org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler.reservePort(DefaultFileLockContentionHandler.java:255) at org.gradle.cache.internal.DefaultFileLockManager.lock(DefaultFileLockManager.java:109) at org.gradle.cache.internal.DefaultFileLockManager.lock(DefaultFileLockManager.java:96) at org.gradle.cache.internal.DefaultFileLockManager.lock(DefaultFileLockManager.java:91) at org.gradle.cache.internal.OnDemandFileAccess.updateFile(OnDemandFileAccess.java:51) at org.gradle.cache.internal.SimpleStateCache.update(SimpleStateCache.java:87) at org.gradle.cache.internal.FileIntegrityViolationSuppressingPersistentStateCacheDecorator$1.create(FileIntegrityViolationSuppressingPersistentStateCacheDecorator.java:50) at org.gradle.cache.internal.FileIntegrityViolationSuppressingPersistentStateCacheDecorator.doUpdate(FileIntegrityViolationSuppressingPersistentStateCacheDecorator.java:67) at org.gradle.cache.internal.FileIntegrityViolationSuppressingPersistentStateCacheDecorator.update(FileIntegrityViolationSuppressingPersistentStateCacheDecorator.java:47) at org.gradle.launcher.daemon.registry.PersistentDaemonRegistry.store(PersistentDaemonRegistry.java:232) at org.gradle.launcher.daemon.server.DaemonRegistryUpdater.onStart(DaemonRegistryUpdater.java:80) at org.gradle.launcher.daemon.server.Daemon.start(Daemon.java:171) at org.gradle.launcher.daemon.bootstrap.DaemonMain.doAction(DaemonMain.java:125) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:50) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37) at org.gradle.launcher.daemon.bootstrap.GradleDaemon.main(GradleDaemon.java:22) Caused by: java.net.BindException: Address already in use: bind at java.base/sun.nio.ch.Net.bind0(Native Method) at java.base/sun.nio.ch.Net.bind(Net.java:555) at java.base/sun.nio.ch.DatagramChannelImpl.bindInternal(DatagramChannelImpl.java:1194) at java.base/sun.nio.ch.DatagramChannelImpl.bind(DatagramChannelImpl.java:1164) at java.base/sun.nio.ch.DatagramSocketAdaptor.bind(DatagramSocketAdaptor.java:107) at java.base/java.net.DatagramSocket.createDelegate(DatagramSocket.java:1426) at java.base/java.net.DatagramSocket.<init>(DatagramSocket.java:330) at java.base/java.net.DatagramSocket.<init>(DatagramSocket.java:389) at org.gradle.cache.internal.locklistener.FileLockCommunicator.<init>(FileLockCommunicator.java:49) ... 22 more * Get more help at https://help.gradle.org ----------------------- Check the JVM arguments defined for the gradle process in: - gradle.properties in project root directory 报错分析
最新发布
07-26
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值