【问题标题】:Windows 8.1 UDP MulticastWindows 8.1 UDP 多播
【发布时间】:2014-01-25 13:55:56
【问题描述】:

我在让 UDP 多播发送从 Windows 8.1 工作时遇到问题。

以下简单的测试程序可在同一主机上运行 Windows 7 或 Ubuntu 13 的接口桥接虚拟机中运行。因此,我确信问题不在于 java 测试程序或物理网络配置。

import java.net.*;

public class multicast_send  {
      public static void main(String[] args) throws Exception {
        DatagramSocket socket = null;
        DatagramPacket outPacket = null;

        socket = new DatagramSocket();
        String msg = "Multicast Test";

        outPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, InetAddress.getByName("230.0.0.1"), 4446);

        socket.send(outPacket);

        System.out.println("Server sent : " + msg);
        socket.close();
      }
    }

windows 8.1 下的失败表现为静默失败,即消息只是没有到达远程主机。

我在 Windows 8.1 主机上使用了 WireShark,但没有看到任何证据表明正在发送 UDP 数据包。

Windows 8.1 防火墙已禁用。

我尝试了一系列多播地址和端口,结果相同(适用于 Win7、Ubuntu,而不是 Windows 8.1)

通过浏览互联网,我注意到有一些关于 Windows 8.1 中引入的 UDP 多播问题的描述;但这种情况似乎与问题描述不符。

三种情况下java环境都是1.7.0.51b13。

我需要在 Windows 8.1 中调整一些隐藏小部件以启用多播 UDP 吗?是否有一个明显的代码问题我没有发现是特定于 Windows 8.1 的?

【问题讨论】:

  • 好的 - 解决了。关于发布问题的一些事情让我想到了它。问题是由于安装了虚拟机,传出代码需要知道要使用哪个接口。所以通过添加“socket.setInterface(InetAddress.getByName());”来修复代码
  • 要么删除您的问题,要么作为答案更详细地解释解决方案。

标签: java windows udp multicast


【解决方案1】:

解决方案是 Windows 8.1 可以访问多个接口,即以太网适配器和多个 VM 桥接适配器。

与其他 win8.1 UNDP 问题的解决方案类似,似乎与其他操作系统不同,没有为 UDP 发送选择默认接口,因此成功的多播依赖于显式分配一个接口给套接字。

Socket.setinetrface.getbyname("以太网适配器的ip地址")

只要我这样做,它就会按预期工作。

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 2014-06-23
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多