我正在关注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);
看看这些错误,在我看来这与听端口有关,我该怎么办呢?
帆布
答案 0 :(得分:5)
这可能是因为您已经在运行服务器的实例。一次只有一台服务器可以侦听给定端口。检查您是否已经在运行实例(如果您正在使用Eclipse,您应该在命令窗口中看到它)并在运行另一个实例之前终止它。
虽然也可能没有正确关闭流。如果您正在运行IDE,重新启动IDE应该可以解决问题,但有时我不得不重新启动计算机。可能是解决此问题的更好解决方案,但这对我有用。
答案 1 :(得分:1)
您可以执行以下操作:
使用netstat命令查看正在使用该端口的应用程序。然后使用tasklist和taskkill终止该端口的应用程序。
答案 2 :(得分:0)
可能发生的是,您在客户端有两条连接到同一端口的电线。当您从服务器收到消息时,客户端计算机不知道重定向消息的线程,因为它们有两个指向相同端口的DatagramSocket提示
答案 3 :(得分:0)
您无需重新启动 IDE。