Пример #1
0
        static async void Start()
        {
            var communicationInterface = new CommunicationsInterface();
            var allInterfaces          = communicationInterface.GetAllInterfaces();

            var networkInterface = allInterfaces.FirstOrDefault(x => x.IpAddress == "192.168.0.36");

            //var tcpListener = new TcpSocketListener();

            //var observerTcpListner = await tcpListener.CreateObservableListener(
            //    port:8000,
            //    communicationInterface: networkInterface,
            //    allowMultipleBindToSamePort:true);

            //var subscriberTcpListener = observerTcpListner.Subscribe(
            //    tcpClient =>
            //    {
            //        //Insert your code here
            //    },
            //    ex =>
            //    {
            //        // Insert your exception code here
            //    },
            //    () =>
            //    {
            //        // Insert your completed code here
            //    });

            //var udpReceiver = new UdpSocketReceiver();

            //var observerUdpReceiver = await udpReceiver.ObservableUnicastListener(
            //    port: 1900,
            //    communicationInterface: networkInterface,
            //    allowMultipleBindToSamePort: true);

            //var subscriberUpdReceiver = observerUdpReceiver.Subscribe(
            //    udpMsg =>
            //    {
            //        System.Console.WriteLine($"Udp package received: {udpMsg.RemoteAddress}:{udpMsg.RemotePort}");
            //    },
            //    ex =>
            //    {
            //        //Inset your exception code here
            //    },
            //    () =>
            //    {
            //        //Insert your completion code here
            //    });

            var udpMulticast = new UdpSocketMulticastClient();

            var observerUdpMulticast = await udpMulticast.ObservableMulticastListener(
                "239.255.255.250",
                1900,
                networkInterface,
                allowMultipleBindToSamePort : false);

            var subscriberUdpMilticast = observerUdpMulticast.Subscribe(
                udpMsg =>
            {
                System.Console.WriteLine($"Udp package received: {udpMsg.RemoteAddress}:{udpMsg.RemotePort}");
            },
                ex =>
            {
                //Insert your exception code here
            },
                () =>
            {
                //Insert your completion code here
            });

            //await udpMulti.JoinMulticastGroupAsync(
            //    "239.255.255.250",
            //    1900,
            //    firstUsableInterface,
            //    allowMultipleBindToSamePort: true,
            //    mcastIpv6AddressList:ipv6MultiCastAddressList);

            //var udpListener = new UdpSocketReceiver();

            //await udpListener.StartListeningAsync(1900, communicationInterface: firstUsableInterface, allowMultipleBindToSamePort: true);

            Console.WriteLine("Listening...");
        }
Пример #2
0
        private async void StartSsdpDiscoveryListener()
        {
            var commInterface = grp.CommInterface;

            macAddr = commInterface.NativeInfo.GetPhysicalAddress().ToString();

            var udpMulticast = new UdpSocketMulticastClient();

            try
            {
                var observerUdpMulticast = await udpMulticast.ObservableMulticastListener(
                    "239.255.255.250",
                    1900,
                    commInterface.SocketLiteInfo,
                    allowMultipleBindToSamePort : false);

                var udpClient = new UdpClient();

                subscriberUdpMilticast = observerUdpMulticast.Subscribe(
                    async udpMsg =>
                {
                    var msg = Encoding.UTF8.GetString(udpMsg.ByteData);
                    if (msg.StartsWith("M-SEARCH * HTTP/1.1") && msg.Contains("ssdp:discover"))
                    {
                        Console.BackgroundColor = ConsoleColor.Green;
                        Console.ForegroundColor = ConsoleColor.Black;
                        Console.WriteLine("Responding M-SEARCH request from " + udpMsg.RemoteAddress);
                        Console.ResetColor();

                        await Task.Delay(new Random().Next(0, 3000));

                        var responses = BuildResponse();
                        foreach (var r in responses)
                        {
                            var bytes = Encoding.UTF8.GetBytes(r);
                            try
                            {
                                await udpClient.SendAsync(bytes, bytes.Length, hostname: udpMsg.RemoteAddress, port: Convert.ToInt32(udpMsg.RemotePort));
                            }
                            catch (SocketException ex)
                            {
                                Console.WriteLine($"SocketException:{ex.Message}");
                            }
                        }
                    }
                },
                    ex =>
                {
                    //Insert your exception code here
                },
                    () =>
                {
                    //Insert your completion code here
                });
            }
            catch (SocketException ex)
            {
                Console.BackgroundColor = ConsoleColor.Red;
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine($"Failed to start SSDP device profile: {ex.Message}");
                Console.ResetColor();
            }
        }