c#发送udp并获得响应

时间:2017-06-25 10:02:43

标签: c# udp

我试图在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

我们可以看到网关回复了我正确的信息。

那么无论响应端口如何获得此回复?

感谢您的帮助

1 个答案:

答案 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);
相关问题