我正在尝试通过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);

希望这可以帮助...

08-18 10:28
查看更多