2013-04-06 39 views
0

我試圖寫服務器和客戶端的服務,它會告訴當前時間。我的代碼:Address aleardy in use exception(Multicast Socket)

服務器

public class TimeServer { 

    public static void main(String[] args) { 
     try { 
     final DatagramSocket so = new DatagramSocket(8189); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        while (true) { 
        try { 
         InetAddress group = InetAddress.getByName("200.20.2.0"); 
         byte[] buf = new byte[256]; 
         Calendar cal = Calendar.getInstance(); 
         buf = cal.toString().getBytes(); 
         DatagramPacket packet = new DatagramPacket(buf, buf.length, 
           group, 8189); 
         so.send(packet); 
        } catch (IOException ex) { 
         ex.printStackTrace(); 
        } 
        Thread.sleep((int)(Math.random() * 5)); 
        } 
       } catch (InterruptedException ex) { 
        ex.printStackTrace(); 
       } 
      } 
     }).start(); 
     } catch (IOException ex) { 
     ex.printStackTrace(); 
     } 
    } 
} 

CLIENT

public class TimeClient { 

    public static void main(String[] args) { 
     try { 
     MulticastSocket so = new MulticastSocket(8190); 
     InetAddress group = InetAddress.getByName("200.20.2.0"); 
     so.joinGroup(group); 

     //5 razy czekamy na otrzymanie od serwera wiadomosci 
     for (int a=0; a<5; a++) { 
      byte[] buf = new byte[256]; 
      DatagramPacket packet = new DatagramPacket(buf, buf.length); 
      so.receive(packet); 

      String recv = new String(packet.getData()); 
      System.out.println("RECEIVED: " + recv); 
     } 

     so.leaveGroup(group); 
     so.close(); 
     } catch (IOException ex) { 
     ex.printStackTrace(); 
     } 
    } 

} 

當啓動服務器,然後客戶端,我得到以下錯誤:

java.net.BindException: Address already in use 
    at java.net.PlainDatagramSocketImpl.bind0(Native Method) 
    at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95) 
    at java.net.DatagramSocket.bind(DatagramSocket.java:376) 
    at java.net.MulticastSocket.<init>(MulticastSocket.java:172) 
    at java.net.MulticastSocket.<init>(MulticastSocket.java:137) 
    at timeclient.TimeClient.main(TimeClient.java:13) 

請幫幫忙,謝謝

編輯: 我改變了客戶端端口,現在我得到異常:

java.net.SocketException: Not a multicast address 
    at java.net.MulticastSocket.joinGroup(MulticastSocket.java:306) 
    at timeclient.TimeClient.main(TimeClient.java:15) 

現在是什麼?

回答

1

每個端口只能由單個應用程序使用。在你的情況下,你的服務器和客戶端(2個應用程序)試圖使用導致異常的相同端口。

爲了解決這個問題,例如,更改此端口從8189客戶端8190

+0

我照你說的做了,得到了新的異常(見編輯) – user2250795 2013-04-06 16:13:34

+0

@ user2250795組播地址應該是224.0.0.0到239.255.255.255 – 2013-04-06 16:55:20

0

您必須更改客戶端(或服務器端口),因爲每個端口只能通過一個單一的過程中使用。

0

嘗試DatagramSocket.setReuseAddress(true)看看會發生什麼。

+0

這應該是一個評論之間,特別是因爲你不知道它甚至作品。 – 2013-04-06 15:23:44

相關問題