UDP地址已在使用?

Can*_*vas 4 java networking udp

我正在关注http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html上的UDP教程,我已经复制了所有代码并编译了它,现在如果我先编译客户端然后再编译服务器,服务器在控制台中打印出来

Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at QuoteServerThread.<init>(QuoteServerThread.java:19)
at MulticastServerThread.<init>(MulticastServerThread.java:10)
at MulticastServer.main(MulticastServer.java:3)
Run Code Online (Sandbox Code Playgroud)

QuoteServerThread第19行是

socket = new DatagramSocket(12345);
Run Code Online (Sandbox Code Playgroud)

MulticastServerThread第10行是

public MulticastServerThread() throws IOException {
    super("MulticastServerThread"); // line 10
}
Run Code Online (Sandbox Code Playgroud)

MulticastServer第3行是

public class MulticastServer {
    public static void main(String[] args) throws java.io.IOException {
        new MulticastServerThread().start(); // line 3
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我先启动服务器,然后是客户端,客户端会在控制台中打印出来

Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at MulticastClient.main(MulticastClient.java:9)
Run Code Online (Sandbox Code Playgroud)

MulticastClient第9行是

MulticastSocket socket = new MulticastSocket(12345);
Run Code Online (Sandbox Code Playgroud)

看看这些错误,在我看来,它与侦听端口有关,我该如何解决这个问题呢?

帆布

Kyl*_*yle 5

这可能是因为您已经在运行服务器的实例.一次只能有一台服务器侦听给定端口.检查您是否已经在运行实例(如果您使用的是Eclipse,您应该在命令窗口中看到它)并在运行另一个实例之前终止它.

虽然也可能没有正确关闭流.如果您正在运行IDE,重新启动IDE应该可以解决问题,但有时我不得不重新启动计算机.可能是解决此问题的更好解决方案,但这对我有用.

  • 我重做了代码,现在它正常工作,我注意到的是,QuoteServerThread不能使用相同的端口,所以我的客户端,服务器和QuoteServer都在端口12345上,这是导致错误的原因,所以我将我的QuoteServer更改为12345 ,以及服务器和客户端到4446,一切正常:) (2认同)