Exception in thread "main" java.net.SocketException: error setting options

今天在做UDP组播发送和接收数据的时候,遇到一个错误,如下:

public static void main(String[] args) throws IOException {
        Properties properties = Resources.getProperties("src/main/resources/ftp.properties");
        System.out.println(properties.toString());
        MulticastSocket multicastSocket = new MulticastSocket(66);
        InetAddress[] inetAddress = InetAddress.getAllByName(properties.getProperty("groupip"));
        System.out.println(Arrays.toString(inetAddress));
        multicastSocket.joinGroup(inetAddress[0]);
        System.out.println(inetAddress.toString());
    } 

解决办法: 

  1. 网上查找各种资料之后,尝试了个方法都不对。
  2. 仔细排查自己的代码发现没有错误,所以开始思考IP或者端口引起的UDP无法加入组中。
  3. 排查之后发现UDP组播IP写错了,记得组播IP是IP的D类地址,范围在224.0.0.0~239.255.255.255
  4. 组播组可以是永久的也可以是临时的。组播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。

          224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;

          224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet;

          224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效;

          239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。

          判断一个IP地址是否为组播地址,只需要判断该地址是否在224.0.0.255(不含)到239.255.255.255之间,

      IP地址本身是一个32位的数值,即0x00000000-0xffffffff之间,所以只需判断IP对应的Long值是否大于0xE00000FF且小于等于0xEFFFFFFF即可(该方法并非原创,而是摘自与live555源代码)

     

你可能感兴趣的:(Exception,in,thread,"main",jav)