谁能解释为什么我的Java代码多播无法通过LAN工作?

冰茶先生

我下面有两个应用程序。我用javaMulticastSocket发送和接收DatagramPacket

发件人

public class Sender {

    public static void main(String[] args) throws IOException {
        int port = 5000;
        String group = "225.4.5.6";
        final MulticastSocket s = new MulticastSocket();
        byte[] buf = new byte[10];
        for (int i = 0; i < buf.length; i++) {
            buf[i] = (byte) i;
        }
        final DatagramPacket pack = new DatagramPacket(buf, buf.length,
                InetAddress.getByName(group), port);
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                try {
                    s.send(pack);
                    System.out.println("Sent");
                } catch (IOException ex) {
                    Logger.getLogger(Sender.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }, 0, 1000);
        //s.close();
    }
}

接收者

public class Receiver {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        int port = 5000;
        String group = "225.4.5.6";
        MulticastSocket s = new MulticastSocket(port);
        s.joinGroup(InetAddress.getByName(group));
        byte[] buf = new byte[1024];
        DatagramPacket pack = new DatagramPacket(buf, buf.length);
        while (true) {
            s.receive(pack);
            System.out.println("Received data from: " + pack.getAddress().toString()
                    + ":" + pack.getPort() + " with length: "
                    + pack.getLength());
            System.out.write(pack.getData(), 0, pack.getLength());
            System.out.println();
        }
//        s.leaveGroup(InetAddress.getByName(group));
//        s.close();
    }

}

当我在本地主机上运行时,此代码工作正常。但是,当我尝试通过LAN在两台不同的计算机上运行它时,我无法收到数据包。

我已经关闭了两台计算机上的防火墙

谁能解释为什么?

编辑

我的路线表:

Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.0.1    192.168.0.103     25
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.0.0    255.255.255.0         On-link     192.168.0.103    281
    192.168.0.103  255.255.255.255         On-link     192.168.0.103    281
    192.168.0.255  255.255.255.255         On-link     192.168.0.103    281
    192.168.164.0    255.255.255.0         On-link     192.168.164.1    276
    192.168.164.1  255.255.255.255         On-link     192.168.164.1    276
  192.168.164.255  255.255.255.255         On-link     192.168.164.1    276
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link     192.168.164.1    276
        224.0.0.0        240.0.0.0         On-link     192.168.0.103    281
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link     192.168.164.1    276
  255.255.255.255  255.255.255.255         On-link     192.168.0.103    281
mcleod_ideafix

您是否为多播地址添加了路由?在Linux上,您必须这样做:

route add -net 224.0.0.0/4 eth0

(假设连接两台机器的网络接口为eth0)

在Windows上,route print在控制台(cmd.exe)提示符下键入(您可能需要管理员权限),然后检查以下几行:

    224.0.0.0        240.0.0.0      En vínculo         127.0.0.1    306
    224.0.0.0        240.0.0.0      En vínculo      192.168.56.1    276
    224.0.0.0        240.0.0.0      En vínculo    192.168.10.100    266
    224.0.0.0        240.0.0.0      En vínculo      192.168.79.1    276
    224.0.0.0        240.0.0.0      En vínculo      192.168.34.1    276

(这是西班牙机器:“ Envínculo”的意思是“链接到”)

Windows列出了多播数据包的多个可能路由。发送方程序实际使用的路由是度量最低的路由(最后一个列号)。在我的设置中,这是使用192.168.10.100(我的主网卡)上的网络接口的路由

检查您的计算机是否将其网卡列为多播的最低度量标准接口。您可能将其127.0.0.1作为多播(localhost)的主要接口,而不是物理网络接口。

另外,您可能需要使用多播组地址来测试可达性224.0.0.1这是所有主机的多播组。假定任何组播数据包都可以被同一子网内的任何主机接收。检查RFC 5771以获取有关多播地址分配的更多信息:http ://tools.ietf.org/html/rfc5771

请注意,如果两台计算机都位于同一子网中(例如,连接到同一台交换机),则多播效果更好。如果两者之间有路由器,则情况会更加复杂。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

谁能解释为什么我的Java代码多播无法通过LAN工作?

来自分类Dev

谁能解释为什么内容无法清除?

来自分类Dev

VBA-谁能解释为什么我通过Cells()遇到对象错误?

来自分类Dev

谁能解释为什么我的date函数通过JS date对象给我一个错误的转换?

来自分类Dev

谁能解释为什么这些“不合适的阻塞方法调用”警告从我的代码中弹出?

来自分类Dev

谁能解释,为什么我的分类不能正常工作?

来自分类Dev

谁能解释我为什么此代码返回false

来自分类Dev

谁能解释我这个Java代码是如何工作的?

来自分类Dev

谁能解释为什么这不起作用?

来自分类Dev

谁能解释为什么 JUnit 测试会出错?

来自分类Dev

谁能解释为什么我们在CSS中使用*?

来自分类Dev

谁能解释为什么我的程序未显示正确的警报?

来自分类Dev

谁能解释为什么我的Carbon设置不保留数据?

来自分类Dev

谁能解释为什么我们需要在SpriteKit中进行缩放?

来自分类Dev

我的程序没有为 print("the") 打印任何内容。谁能解释为什么?

来自分类Dev

CakePHP:如果将“ fields”和“ contain”组合在一起,我将无法获得预期的结果。谁能解释为什么?

来自分类Dev

谁能解释为什么我收到此错误[ImportError:找不到lxml,请安装它]

来自分类Dev

谁能解释我为什么在此代码中使用花括号“ {}”?

来自分类Dev

为什么我的'if'参数不能解释为逻辑

来自分类Dev

有谁能解释为什么每次使用此jQuery.offset()都会移位?

来自分类Dev

谁能解释为什么jQuery附加的内联块项失去了空间?

来自分类Dev

谁能解释为什么strtotime('cast')返回一个值?

来自分类Dev

谁能解释为什么%char()会发生十进制数据错误?

来自分类Dev

谁能解释为什么这个单元测试失败了?

来自分类Dev

谁能解释为什么我们使用“ final AtomicInteger count = this.count;”,以及为什么使用关键字final

来自分类Dev

谁能解释为什么传入的IIFE参数会以未定义方式更改范围内变量的原因?

来自分类Dev

我如何解释为什么DRM无法正常工作?

来自分类Dev

谁能向我解释为什么我会得到堆栈溢出错误?

来自分类Dev

谁能向我解释为什么我的变量“ sum”不计算数组“ arrPrice”的总和?

Related 相关文章

  1. 1

    谁能解释为什么我的Java代码多播无法通过LAN工作?

  2. 2

    谁能解释为什么内容无法清除?

  3. 3

    VBA-谁能解释为什么我通过Cells()遇到对象错误?

  4. 4

    谁能解释为什么我的date函数通过JS date对象给我一个错误的转换?

  5. 5

    谁能解释为什么这些“不合适的阻塞方法调用”警告从我的代码中弹出?

  6. 6

    谁能解释,为什么我的分类不能正常工作?

  7. 7

    谁能解释我为什么此代码返回false

  8. 8

    谁能解释我这个Java代码是如何工作的?

  9. 9

    谁能解释为什么这不起作用?

  10. 10

    谁能解释为什么 JUnit 测试会出错?

  11. 11

    谁能解释为什么我们在CSS中使用*?

  12. 12

    谁能解释为什么我的程序未显示正确的警报?

  13. 13

    谁能解释为什么我的Carbon设置不保留数据?

  14. 14

    谁能解释为什么我们需要在SpriteKit中进行缩放?

  15. 15

    我的程序没有为 print("the") 打印任何内容。谁能解释为什么?

  16. 16

    CakePHP:如果将“ fields”和“ contain”组合在一起,我将无法获得预期的结果。谁能解释为什么?

  17. 17

    谁能解释为什么我收到此错误[ImportError:找不到lxml,请安装它]

  18. 18

    谁能解释我为什么在此代码中使用花括号“ {}”?

  19. 19

    为什么我的'if'参数不能解释为逻辑

  20. 20

    有谁能解释为什么每次使用此jQuery.offset()都会移位?

  21. 21

    谁能解释为什么jQuery附加的内联块项失去了空间?

  22. 22

    谁能解释为什么strtotime('cast')返回一个值?

  23. 23

    谁能解释为什么%char()会发生十进制数据错误?

  24. 24

    谁能解释为什么这个单元测试失败了?

  25. 25

    谁能解释为什么我们使用“ final AtomicInteger count = this.count;”,以及为什么使用关键字final

  26. 26

    谁能解释为什么传入的IIFE参数会以未定义方式更改范围内变量的原因?

  27. 27

    我如何解释为什么DRM无法正常工作?

  28. 28

    谁能向我解释为什么我会得到堆栈溢出错误?

  29. 29

    谁能向我解释为什么我的变量“ sum”不计算数组“ arrPrice”的总和?

热门标签

归档