2013-02-26 87 views
4

我下面在http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html UDP的教程,我已经复制了所有的代码和编译它,现在如果我第一次,然后编译客户端的服务器,该服务器打印了这一点,在控制台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); 

的错误来看,似乎对我来说,这是与聆听港口有关,我该如何解决这个问题?

帆布

回答

3

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

虽然也可能没有正确关闭流。如果您正在运行IDE,重新启动IDE应该可以解决问题,但偶尔我必须重新启动计算机。可能是一个更好的解决方案来解决这个问题,但这是我的工作。

+0

刚刚关闭并重新打开Eclipse,仍然得到相同的错误:( – Canvas 2013-02-26 18:14:31

+0

@Canvas试试你的电脑?如果你没有改变教程中的客户端和服务器之间的任何东西,它不应该是一个代码错误。 – 2013-02-26 18:40:44

+0

我确实改变了端口,就是这样,但是确定,它会在高级版中使用:) – Canvas 2013-02-26 19:00:45

1

你可以做到以下几点:

用netstat coomand查看哪些应用程序正在使用该端口。 然后使用tasklist和taskkill来终止该端口上的应用程序。

+0

查看这个问题已经接受的答案;问题在于客户端和服务器试图收听相同的端口。尽管如此,在这些信息被发现之前,这可能是一个有用的评论(而不是答案)。 – 2013-02-26 22:00:56

+0

1.当我回答时没有接受答案。我的答案仍然成立。有时用户启动两个分离的tomcat实例,例如针对可能导致此问题的不同应用程序。因此netstat是一个快速查找的方法。 3。有时用户thisnk他们已经关闭了一个正在运行的实例,只需关闭终端,而实例仍在后台运行。如果应用程序使用终端并通过IDE启动,那么所接受的答案将不起作用。 – 2018-01-25 21:11:39

相关问题