使用 Visual Studio 2010 - C#
我们的机构有多功能机动车辆火箭。这些设备本质上是一个移动 wifi 路由器,您可以将宽带卡插入其中。它们还有一个内置的 GPS 模块,该设备的特点之一是它具有 MultiCast,并将通过多播发送 GPS 坐标(以及其他信息)。我想要做的是捕获来自该设备的数据,然后使用 GPS 信息做各种事情。
我试图围绕 Multicast 进行思考,并尝试了许多不同的代码来尝试捕获数据。唉,我无法捕获一条能够处理的信息。Rocket 设备上的组播设置为:
- 多播地址:224.0.0.1
- 组播端口:4004
- 多播 TTL:16
下面是我一直在尝试使用的代码,它是从代码清单 10.10 中得到的 (这个页面在其他几个 StackOverflow 问题中都被引用过……)屏幕。我没有从 Try/Catch 块中收到任何异常消息。我知道计算机正在接收来自 Rocket 的信息,因为 Utility 自己的“监控程序”每隔几秒就会更新一次,而 WireShark 显示该端口上发生了一些事情(尽管我不知道如何阅读它并且不完全理解它...)我有什么遗漏...?注意:在运行此代码时,我没有使用 Utility 自己的监控程序...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace MulticastUDPListener
{
class Program
{
private static void StartListener()
{
try
{
UdpClient sock = new UdpClient(4004);
Console.WriteLine("Ready to receive…");
sock.JoinMulticastGroup(IPAddress.Parse("224.0.0.1"), 50);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = sock.Receive(ref iep);
string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
Console.WriteLine("received: {0} from: {1}", stringData, iep.ToString());
sock.Close();
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
static void Main(string[] args)
{
StartListener();
}
}
}