예제 #1
0
        public string Discover(int attempts = 3)
        {
            var packet     = new DiscoveryPacket();
            var buffer     = new byte[1024];
            int bytesrecvd = 0;

            for (var i = 1; i <= attempts && bytesrecvd == 0; i++)
            {
                try
                {
                    Send(packet);
                    bytesrecvd = Receive(buffer);
                }
                catch (SocketException e)
                {
                    if (e.SocketErrorCode != SocketError.TimedOut)
                    {
                        throw e;
                    }
                    if (i == attempts)
                    {
                        throw new TimeoutException($"Discovery timed out after {i} attempts.");
                    }
                }
            }

            var endpoint = ParseLocationData(buffer, bytesrecvd);

            return(endpoint);
        }
예제 #2
0
        void Send(DiscoveryPacket packet)
        {
            var ssdpEndpoint = new IPEndPoint(IPAddress.Parse(ssdpMcastAddr), ssdpPort);

            SendTo(packet.ToByteArray(), 0, packet.Length, SocketFlags.None, ssdpEndpoint);
        }