我试图在c#中创建一个小程序来处理xiaomi智能家庭api。 Api translation
我开始时陷入了困境。我没有实现发送{" cmd" :" get_id_list"}到网关并接收响应。我试图使用此代码发送,但我没有回应:
string i = "{\"cmd\" : \"get_id_list\"}";
UdpClient client = new UdpClient();
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.1.112"), 9898);
Byte[] buffer = null;
buffer = Encoding.Unicode.GetBytes(i.ToString());
client.Send(buffer, buffer.Length, ep);
byte[] b2 = client.Receive(ref ep);
string str2 = System.Text.Encoding.ASCII.GetString(b2, 0, b2.Length);
192.168.1.112是我的网关ip地址。
这是Windows上的数据包发件人软件的屏幕截图:Screenshot
我们可以看到网关回复了我正确的信息。
那么无论响应端口如何获得此回复?
感谢您的帮助
答案 0 :(得分:1)
正如@jdweng建议的那样,您需要在UDP客户端上使用Connect()方法,否则它不会听取响应。您可以执行此操作,也可以使用两个单独的UdpClients,一个用于发送,另一个用于接收。
string i = "{\"cmd\" : \"get_id_list\"}";
UdpClient client = new UdpClient();
client.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.112"), 9898));
Byte[] buffer = null;
buffer = Encoding.Unicode.GetBytes(i.ToString());
client.Send(buffer, buffer.Length, ep);
byte[] b2 = client.Receive(ref ep);
string str2 = System.Text.Encoding.ASCII.GetString(b2, 0, b2.Length);