예제 #1
0
        public TcpServerTest()
        {
            _server = new RxTcpServer();

            _server.Error.Subscribe(e => Log.AddOnScheduler($"Error.{e.Method} - {e.Exception?.Message}"));
            _server.Accepted.Subscribe(e => Log.AddOnScheduler($"Accept. from {e.Client.RemoteEndPoint}"));
            _server.Closed.Subscribe(e => Log.AddOnScheduler($"Closed.{e}"));
            _server.Received.Subscribe(e => Log.AddOnScheduler($"Receive (from {e.From.Client.RemoteEndPoint}).\n{e.Data.ToDumpString()}"));

            Listen.Subscribe(_ =>
            {
                try
                {
                    _server.Listen(Address.Value, Port.Value);
                    Log.Add($"Listen {Address.Value} : {Port.Value}");
                }
                catch (Exception exp)
                {
                    Log.Add($"Listen error.{exp.Message}");
                }
            });

            Close.Subscribe(_ => _server.Close());

            this.Broadcast.Subscribe(data => _server.Broadcast(data.ToSendData()));
        }
예제 #2
0
        static void Main(string[] args)
        {
            var multicast1 = new RxUdpListener();

            multicast1.LocalAddress = IPAddress.Parse("192.168.1.100");
            multicast1.Listen("239.192.0.4", "192.168.1.100", 60004);
            var multicast2 = new RxUdpListener();

            multicast2.LocalAddress = IPAddress.Parse("192.168.1.100");
            multicast2.Listen("239.192.0.4", "192.168.1.100", 60004);

            var server = new RxTcpServer();

            server.Error.Subscribe(e => Warning($"[Server] error.({e.Method}) {e.Exception.Message}"));
            server.Accepted.Subscribe(c =>
            {
                Information($"[Server] Accept ({c.Client.RemoteEndPoint})");
            });
            server.Closed.Subscribe(e => Information($"[Server] Closed ({e})"));
            server.Received.Subscribe(t => Receive($"[Server] Received from {t.RemoteEndPoint} {t.Data.Length} bytes."));
            // Listen
            try
            {
                server.Listen(IPAddress.Any.ToString(), 12345);
                Console.WriteLine("Listen 12345");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }


            var client = new RxTcpClient();

            // Subscribe
            client.Error.Subscribe(e => Warning($"[Client] error.({e.Method}) {e.Exception.Message}"));
            client.Closed.Subscribe(e => Information($"[Client] Closed ({e})"));
            client.Received.Subscribe(t => Receive($"[Client] Received {t.RemoteEndPoint} {t.Data.Length} bytes."));
            client.KeepAliveTime       = 10 * 1000;
            client.KeepAliveInterval   = 1000;
            client.KeepAliveRetryCount = 5;
            try
            {
                client.ConnectAsync("127.0.0.1", 12345).Wait();
                Console.WriteLine("Connect 127.0.0.1:12345");
            }
            catch (Exception e)
            {
                Warning(e.Message);
            }


            Console.Write("Client >");
            var line = Console.ReadLine();

            // change keep alive
            client.SetKeepAliveTime(3);
            client.SetKeepAliveInterval(1);
            client.SetKeepAliveRetryCount(1);

            while (!string.IsNullOrEmpty(line))
            {
                client.Send(Encoding.UTF8.GetBytes(line));

                Console.Write("Server >");
                line = Console.ReadLine();

                if (string.IsNullOrEmpty(line))
                {
                    break;
                }
                server.Broadcast(Encoding.UTF8.GetBytes(line));

                Console.Write("Client >");
                line = Console.ReadLine();
            }

            client.Close();
            server.Close();

            Console.ReadKey();
        }
예제 #3
0
        static void Main(string[] args)
        {
            var nicInformations = NetworkInterfaceCardInformation.GetNetworkInterfaceCardInformations();

            if (nicInformations != null)
            {
                // List current network informations
                foreach (var nic in nicInformations)
                {
                    Console.WriteLine(nic.ToMultiLineString());
                }

                #region Multicast receive (IPv6)
                var multicastTargetNicV6 = nicInformations.FirstOrDefault(nic => nic.SupportsMulticast && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback && nic.IsSupportIPv6);
                if (multicastTargetNicV6 != null)
                {
                    Console.WriteLine($"Listen multicast(IPv6) data.(NIC:{multicastTargetNicV6.IPv6Property.Index})");
                    var udpListenerV6 = new RxUdpListener();
                    udpListenerV6.Received.Subscribe(t => Receive($"[UDP] Received from {t.From} {t.Data.Length} bytes."));
                    udpListenerV6.Listen("FF02::1", multicastTargetNicV6.IPv6Property.Index, 5000);
                }
                #endregion

                #region Multicast receive(IPv4)
                var multicastTargetNicV4 = nicInformations.FirstOrDefault(nic => nic.SupportsMulticast && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback && nic.IsSupportIPv4 && nic.UnicastAddresses.Any(a => a.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork));
                if (multicastTargetNicV4 != null)
                {
                    var unicastAddress = multicastTargetNicV4.UnicastAddresses.First(a => a.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork);
                    Console.WriteLine($"Listen multicast(IPv4) data.(NIC:{unicastAddress})");
                    var udpListenerV4 = new RxUdpListener();
                    udpListenerV4.Received.Subscribe(t => Receive($"[UDP] Received from {t.From} {t.Data.Length} bytes."));
                    udpListenerV4.Listen("239.192.100.200", unicastAddress.Address.ToString(), 5001);
                }
                #endregion
            }

            var server = new RxTcpServer();
            server.Error.Subscribe(e => Warning($"[Server] error.({e.Method}) {e.Exception.Message}"));
            server.Accepted.Subscribe(c => Information($"[Server] Accept ({c.Client.RemoteEndPoint})"));
            server.Closed.Subscribe(e => Information($"[Server] Closed ({e})"));
            server.Received.Subscribe(t => Receive($"[Server] Received from {t.RemoteEndPoint} {t.Data.Length} bytes."));
            // Listen
            try
            {
                server.Listen(IPAddress.Any.ToString(), 12345);
                Console.WriteLine("Listen 12345");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            var client = new RxTcpClient();
            // Subscribe
            client.Error.Subscribe(e => Warning($"[Client] error.({e.Method}) {e.Exception.Message}"));
            client.Closed.Subscribe(e => Information($"[Client] Closed ({e})"));
            client.Received.Subscribe(t => Receive($"[Client] Received {t.RemoteEndPoint} {t.Data.Length} bytes."));

            // Connect
            try
            {
                client.Connect("127.0.0.1", 12344);
                Console.WriteLine("Connect 127.0.0.1:12344");
            }
            catch (Exception e)
            {
                Warning(e.Message);
            }
            try
            {
                client.Connect("127.0.0.1", 12345);
                Console.WriteLine("Connect 127.0.0.1:12345");
            }
            catch (Exception e)
            {
                Warning(e.Message);
            }

            Console.Write(">");
            var line = Console.ReadLine();
            while (!string.IsNullOrEmpty(line))
            {
                client.Send(Encoding.UTF8.GetBytes(line));

                Console.Write(">");
                line = Console.ReadLine();

                if (string.IsNullOrEmpty(line))
                {
                    break;
                }
                server.Broadcast(Encoding.UTF8.GetBytes(line));

                Console.Write(">");
                line = Console.ReadLine();
            }

            client.Close();
            server.Close();

            Console.ReadKey();
        }