1

I am trying to discover a Belkin Wemo switch using C#. I am sending SSDP over the network to get back a response from the switch.

The following snippet creates a socket, sends SSDP and waits for 2 seconds to receive an answer. If nothing is read, it starts all again.

bool repeat = true;
while (repeat)
{
    UdpClient udpClient = null;
    try
    {
        // Creates the socket.
        udpClient = new UdpClient(10140);
        udpClient.Client.ReceiveTimeout = 2000;
        IPAddress broadcastIpAddress = IPAddress.Parse("239.255.255.250");
        IPEndPoint broadcastIpEndPoint = new IPEndPoint(broadcastIpAddress, 1900);
        udpClient.JoinMulticastGroup(broadcastIpAddress);

        // Sends SSDP.
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.Append("M-SEARCH * HTTP/1.1\r\n");
        stringBuilder.Append("ST: urn:Belkin:service:basicevent:1\r\n");
        stringBuilder.Append("MX: 1\r\n");
        stringBuilder.Append("MAN: \"ssdp:discover\"\r\n");
        stringBuilder.Append("HOST: 239.255.255.250:1900\r\n");
        stringBuilder.Append("\r\n");
        byte[] bytesToSend = Encoding.UTF8.GetBytes(stringBuilder.ToString());
        udpClient.Send(bytesToSend, bytesToSend.Length, broadcastIpEndPoint);

        // Receives response.
        IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
        byte[] receivedBytes = udpClient.Receive(ref remoteIpEndPoint);
        string receivedString = Encoding.UTF8.GetString(receivedBytes);
        Console.WriteLine(receivedString);

        repeat = false;
    }
    catch (SocketException) { }
    finally 
    {
        udpClient.Close();
    }
}

Most of the time, a response is returned by the switch. However, sometimes it loops indefinitely without getting any feedback.

I am using Wireshark. In the second case, it happens that no SSDP is sent. I have no explanation about that. My system is Windows 7, maybe it helps...

Numid
  • 514
  • 1
  • 5
  • 14

0 Answers0