java - 地址已在使用异常(多播套接字)

标签 java multicastsocket

我正在尝试编写服务器和客户端来提供服务,以告知当前时间。我的代码:

服务器

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();
      }
   }
}

客户端

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)

现在是什么情况?

最佳答案

每个端口只能由单个应用程序使用。在您的情况下,您的服务器和客户端(2个应用程序)正在尝试使用导致异常的同一端口。

要修复此问题,请将客户端端口从 8189 更改为 8190

关于java - 地址已在使用异常(多播套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15852037/

相关文章:

带有sql语句的Java JDBC exec过程

java - 从可能(或不)在类路径中的文件中获取 InputStream

无法通过多个 'read' 调用从多播套接字读取 RTP 数据包(或获取其大小)

java - 组播错误: Multicast Address Not Found

java - 从使用无限滚动的网页中解析 html

java - 如何分析 NetBeans Maven 项目中的 JUnit 测试?

java - Jackson:在@JsonCreator 设置后写入最终字段?

linux - 为什么接收UDP消息时需要bind?

java - 使用 Java 的 UDP 多播 : Message cannot be received by entire multicast group