首先,我为错误使用术语而道歉。
我的本地网络上有一个传感器。它通过端口35333向网络上的每个人广播当前温度值。我想创建一个C#控制台程序,它不断接收来自该传感器的数据包。
这是我目前的代码:
public static UdpClient Client = new UdpClient(35333);
private static async void Start()
{
Client.BeginReceive(new AsyncCallback(recv), null);
}
private static void recv(IAsyncResult res)
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint);
//Process codes
Client.BeginReceive(new AsyncCallback(recv), null);
}
上面的代码有效,但问题是:我一直收到相同的字节数组。
...
[114][51][57][48][48][77][72][112]
[114][51][57][48][48][77][72][112]
[114][51][57][48][48][77][72][112]
[114][51][57][48][48][77][72][112]
[114][51][57][48][48][77][72][112]
...
据我所知,再次,原谅我糟糕的网络知识,我必须以某种方式向这个传感器发回一个确认信息,所以它开始向我发送“真实的”数据。
欢迎任何提示或建议!
答案 0 :(得分:1)
这里至少有两种可能性。
首先,这可能只是温度,并没有改变。在这种情况下,您需要按照传感器规范的方式解析字节。
其次,如果这确实是需要确认的数据包,那么您将需要找出传感器侦听的端口(来自规范),以及确认数据包应该是什么样的(来自规范)并发送它到那个港口。
这里的关键是检查传感器附带的文件。
新代码将位于recv
方法内,并显示类似于以下内容:
private static void recv(IAsyncResult res)
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint);
//Pseudo code
//start_packet is the packet of bytes above from the sensor
If (received == start_packet)
{
//send acknowledgement
}
//Process codes
Client.BeginReceive(new AsyncCallback(recv), null);
}