【问题标题】:UDP Multicast between PC and Android ICS (CSharp vs. Java)PC 和 Android ICS 之间的 UDP 多播(CSharp 与 Java)
【发布时间】:2012-08-09 20:56:29
【问题描述】:

我遇到了一个小问题,让我头疼不已。
我写了两个用于 UDP 通信的小程序(每个都接收和发送)。

到目前为止的测试:
- PC 发送数据包并接收它。
- Android 发送和接收数据包。

在同一网络内的 2 台 PC 之间进行另一次测试后,似乎
即使是那两个也不会互相交谈。

主要采用android设备的Java代码
来自我为 Android 集群编写的(工作)程序(所以我认为它是正确的)。

有没有人对此有任何想法(或者甚至可能是与防火墙相关的问题)?
一些代码(仅重要部分,例如精简列表的监控和管理)

初始化:

private UdpClient udpClient;
private static int udpPort=9998;
private IPAddress mCastAddress = IPAddress.Parse("239.255.255.255");

在托里:

udpClient = new UdpClient(udpPort);
udpClient.MulticastLoopback = true;
udpClient.EnableBroadcast = true;
udpClient.AllowNatTraversal(true);
udpClient.JoinMulticastGroup(mCastAddress);

发件人线程:

IPEndPoint iep = new IPEndPoint(mCastAddress, udpPort);           
//MessageCoder.encode(msg) is returning a valid byte[], no problem here.
byte[] data=MessageCoder.encode(msg);
udpClient.Send(data, data.Length, iep);                 

接收者线程:

IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref iep);

提前致谢。
[编辑]
我要提一下,android 设备似乎没有收到
我的电脑上的任何软件包也是如此。
[/编辑]

【问题讨论】:

  • 接收方的端点不应该和发​​送方在同一个端口上监听吗?
  • 端口0 通常不起作用:)
  • 嗯,端口 0 就在那里,因为绝望的谷歌搜索;它也不适用于另一个端口:(
  • 您正在通过 NAT 吗?除非经过特别配置,否则组播不会通过路由器。
  • 澄清一下:一开始我只使用成员MulticastLoopback和JoinMulticastGroup。其他的被添加是因为它到目前为止还没有工作。我现在要做一些测试。到目前为止,谢谢。

标签: c# udp multicast udpclient


【解决方案1】:

好的,我找到了解决 PC PC 问题的方法:

在托里:

udpClient = new UdpClient(udpPort);
udpClient.MulticastLoopback = true;
udpClient.EnableBroadcast = true;
udpClient.JoinMulticastGroup(mCastAddress);

在发件人线程中:

 IPEndPoint iep = iep = new IPEndPoint(IPAddress.Broadcast, udpPort); 

在接收线程中:

IPEndPoint iep = new IPEndPoint(IPAddress.Any,udpPort);

有时是小事……

现在是时候尝试与我的 Android 设备互操作了。

【讨论】:

  • 好吧,终于一切正常了。奇怪的是:为了让所有人一起运行,我 必须 发送到广播 (255.255.255.255)。好吧,如果它运行,请不要抱怨:)
猜你喜欢
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多