ajl*_*u13 3 java sockets networking udp
我正在尝试通过PlayCap接收UDP数据广播到Java中的网络地址192.168.103.255端口3000,但是我在设置方面遇到了麻烦.这就是我所拥有的:
DatagramSocket socket = new DatagramSocket();
InetSocketAddress address = new InetSocketAddress("192.168.103.255", 3000);
socket.bind(address);
Run Code Online (Sandbox Code Playgroud)
我从绑定调用得到"java.net.SocketException:已绑定".我对网络很缺乏经验,所以我可能在这里做错了.任何帮助表示赞赏.
这是堆栈跟踪:
java.net.SocketException: already bound
at java.net.DatagramSocket.bind(Unknown Source)
at runner.main(runner.java:16)
Run Code Online (Sandbox Code Playgroud)
roz*_*din 19
我不想复兴和老线程,但我不认为这个问题的答案是正确的.当我使用类似的代码创建DatagramSocket时,我遇到了同样的问题.
DatagramSocket socket = new DatagramSocket();
socket.setReuseAddress(true);
socket.bind(new InetSocketAddress(InetAddress.getByName("localhost"), 5566));
Run Code Online (Sandbox Code Playgroud)
这导致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)
Run Code Online (Sandbox Code Playgroud)
Java结果:1
不是因为有另一个进程占用同一个端口,但是当我使用默认构造函数时,我已经创建了一个已经存在的BOUND数据报套接字.
new DatagramSocket()
Run Code Online (Sandbox Code Playgroud)
根据javadoc:
DatagramSocket()构造数据报套接字并将其绑定到本地主机上的任何可用端口.
因此,异常的原因是您尝试绑定已绑定的套接字.要使其工作,您需要使用下面的构造函数创建一个unbond套接字
DatagramSocket socket = new DatagramSocket(null);
InetSocketAddress address = new InetSocketAddress("192.168.103.255", 3000);
socket.bind(address);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...