2013-02-26 85 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

相關問題