我正在尝试通过Java接收PlayCap广播到网络地址192.168.103.255端口3000的UDP数据,但无法进行设置。这是我所拥有的:
DatagramSocket socket = new DatagramSocket();
InetSocketAddress address = new InetSocketAddress("192.168.103.255", 3000);
socket.bind(address);
我从绑定调用中获取“java.net.SocketException:已绑定”。我对网络缺乏经验,因此我在这里可能做错了什么。任何帮助表示赞赏。
这是堆栈跟踪:
java.net.SocketException: already bound
at java.net.DatagramSocket.bind(Unknown Source)
at runner.main(runner.java:16)
最佳答案
我不想恢复旧的线程,但是我不认为这个问题的答案是正确的。当我使用类似的代码创建DatagramSocket时,我遇到了相同的问题。
DatagramSocket socket = new DatagramSocket();
socket.setReuseAddress(true);
socket.bind(new InetSocketAddress(InetAddress.getByName("localhost"), 5566));
这导致SocketException
Exception in thread "main" java.net.SocketException: already bound
at java.net.DatagramSocket.bind(DatagramSocket.java:376)
at testapplication.TestApplication.main(TestApplication.java:25)
Java结果:1
不是因为有另一个进程占用了相同的端口,但是当我使用默认构造函数时,我已经创建了一个已经 BOUND 数据报套接字。
new DatagramSocket()
根据javadoc:
DatagramSocket()
构造一个数据报套接字,将其绑定到
本地主机。
因此,出现异常的原因是您试图绑定已经绑定的套接字。为了使其工作,您需要使用以下构造函数创建一个未绑定的套接字
DatagramSocket socket = new DatagramSocket(null);
InetSocketAddress address = new InetSocketAddress("192.168.103.255", 3000);
socket.bind(address);
希望这可以帮助...