4

我正在关注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)

QuoteServerThread 第 19 行是

socket = new DatagramSocket(12345);

MulticastServerThread 第 10 行是

public MulticastServerThread() throws IOException {
    super("MulticastServerThread"); // line 10
}

MulticastServer 第 3 行是

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

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

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)

MulticastClient 第 9 行是

MulticastSocket socket = new MulticastSocket(12345);

查看错误,在我看来这与监听端口有关,我该如何解决这个问题?

帆布

4

4 回答 4

5

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

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

于 2013-02-26T18:12:29.223 回答
0

您可以执行以下操作:

使用 netstat coomand 查看哪个应用程序正在使用该端口。然后使用 tasklist 和 taskkill 杀死该端口的应用程序。

于 2013-02-26T19:28:25.740 回答
0

可能发生的情况是您在客户端有两条连接到同一端口的电线。当您从服务器收到消息时,客户端机器不知道要重定向消息的线程,因为它们有两个不同的 DatagramSocket 提示指向同一个端口

于 2019-11-19T07:33:30.987 回答
0
  1. 打开任务管理器
  2. 搜索以 OpenJDK 开头的进程名称。
  3. 结束/终止进程。
  4. 现在再次运行您的程序。

您无需重新启动 IDE。

于 2021-05-25T20:21:48.797 回答