示例#1
0
 private Udt.Socket CreateSocket()
 {
     Udt.Socket socket = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);
     socket.ReuseAddress = true;
     socket.Bind(IPAddress.Any, localPort);
     return(socket);
 }
示例#2
0
        public static void Run(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Usage: {0} server port",
                    System.AppDomain.CurrentDomain.FriendlyName);
                return;
            }

            Udt.Socket socket = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);

            socket.Bind(IPAddress.Any, int.Parse(args[0]));

            socket.Listen(1);

            while (true)
            {
                Udt.Socket client0 = socket.Accept();

                Console.WriteLine("First connection accepted from {0}",
                    client0.RemoteEndPoint.ToString());

                Udt.Socket client1 = socket.Accept();

                Console.WriteLine("Second connection accepted from {0}",
                    client1.RemoteEndPoint.ToString());

                IPEndPoint client1EndPoint = client1.RemoteEndPoint;

                SendAddressTo(client0.RemoteEndPoint, client1);
                SendAddressTo(client1EndPoint, client0);
            }
        }
示例#3
0
        public static void Run(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Usage: {0} server port",
                                  System.AppDomain.CurrentDomain.FriendlyName);
                return;
            }

            Udt.Socket socket = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);

            socket.Bind(IPAddress.Any, int.Parse(args[0]));

            socket.Listen(1);

            while (true)
            {
                Udt.Socket client0 = socket.Accept();

                Console.WriteLine("First connection accepted from {0}",
                                  client0.RemoteEndPoint.ToString());

                Udt.Socket client1 = socket.Accept();

                Console.WriteLine("Second connection accepted from {0}",
                                  client1.RemoteEndPoint.ToString());

                IPEndPoint client1EndPoint = client1.RemoteEndPoint;

                SendAddressTo(client0.RemoteEndPoint, client1);
                SendAddressTo(client1EndPoint, client0);
            }
        }
示例#4
0
        static void SendAddressTo(IPEndPoint endPoint, Udt.Socket socket)
        {
            using (Udt.NetworkStream st = new Udt.NetworkStream(socket))
                using (BinaryWriter writer = new BinaryWriter(st))
                {
                    byte[] addrBytes = endPoint.Address.GetAddressBytes();

                    writer.Write((int)addrBytes.Length);
                    writer.Write(addrBytes);
                    writer.Write((int)endPoint.Port);
                }
        }
示例#5
0
 private void ListenMessages(Udt.Socket socket)
 {
     try
     {
         using (Udt.NetworkStream st = new Udt.NetworkStream(socket))
             using (BinaryReader reader = new BinaryReader(st))
             {
                 while (started)
                 {
                     LOGGER.Info("waiting for new message");
                     LOGGER.Info("RECEIVED: " + reader.ReadString());
                 }
             }
     }
     catch (Exception ex)
     {
         LOGGER.Error("message listen exception", ex);
     }
     LOGGER.Info("listen messages stopped");
 }
示例#6
0
        private void StartPeerConnection(PeerInfo peerInfo)
        {
            LOGGER.Info("Created new socket for peer connection");
            socket = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);
            socket.ReuseAddress = true;
            socket.SetSocketOption(Udt.SocketOptionName.Rendezvous, true);
            socket.Bind(IPAddress.Any, localPort);
            LOGGER.Info("Waiting for peer connection");
            socket.Connect(peerInfo.Address, peerInfo.Port);

            LOGGER.Info("peer connected, starting sender and listener threads");

            Thread receiveThread = new Thread(() => ListenMessages(socket));

            receiveThread.Start();

            Thread sendThread = new Thread(() => SendDate(socket));

            sendThread.Start();
            LOGGER.Info("connection done");
        }
示例#7
0
 public void Connect()
 {
     started = true;
     try
     {
         LOGGER.Info("creating socket");
         socket = CreateSocket();
         LOGGER.Info("connecting to signalling server, address: " + serverAddressStr + " port: " + serverPort);
         IPAddress serverAddress = IPAddress.Parse(serverAddressStr);
         socket.Connect(serverAddress, serverPort);
         LOGGER.Info("connected to signalling server");
         PeerInfo peerInfo = ReceivePeerInfo();
         StartPeerConnection(peerInfo);
     }
     catch (Exception ex)
     {
         LOGGER.Error("connect exception", ex);
         started = false;
         ShutdownSocket();
     }
 }
示例#8
0
 private void SendDate(Udt.Socket socket)
 {
     try
     {
         using (Udt.NetworkStream st = new Udt.NetworkStream(socket))
             using (BinaryWriter writer = new BinaryWriter(st))
             {
                 Thread.Sleep(10000);
                 while (started)
                 {
                     LOGGER.Info("Sending date");
                     writer.Write(DateTime.Now.ToLongTimeString());
                     Thread.Sleep(1000);
                 }
             }
     }
     catch (Exception ex)
     {
         LOGGER.Error("send date exception", ex);
     }
     LOGGER.Info("send date stopped");
 }
示例#9
0
        public static void Run(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("Usage: {0} client local_port server server_port [client|server]",
                                  System.AppDomain.CurrentDomain.FriendlyName);
                return;
            }

            Udt.Socket client = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);
            client.ReuseAddress = true;

            client.Bind(IPAddress.Any, int.Parse(args[0]));

            IPAddress serverAddress;

            if (!IPAddress.TryParse(args[1], out serverAddress))
            {
                Console.WriteLine("Error trying to parse {0}", args[1]);
                return;
            }

            client.Connect(serverAddress, int.Parse(args[2]));

            int       peerPort;
            IPAddress peerAddress;

            // recv the other peer info
            using (Udt.NetworkStream st = new Udt.NetworkStream(client, false))
                using (BinaryReader reader = new BinaryReader(st))
                {
                    int len = reader.ReadInt32();

                    byte[] addr = reader.ReadBytes(len);

                    peerPort = reader.ReadInt32();

                    peerAddress = new IPAddress(addr);

                    Console.WriteLine("Received peer address = {0}:{1}",
                                      peerAddress, peerPort);
                }

            bool bConnected = false;
            int  retry      = 0;

            while (!bConnected)
            {
                try
                {
                    client.Close();

                    client = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);
                    client.ReuseAddress = true;

                    client.SetSocketOption(Udt.SocketOptionName.Rendezvous, true);

                    client.Bind(IPAddress.Any, int.Parse(args[0]));

                    Console.WriteLine("{0} - Trying to connect to {1}:{2}. ",
                                      retry++, peerAddress, peerPort);

                    client.Connect(peerAddress, peerPort);

                    Console.WriteLine("Connected successfully to {0}:{1}",
                                      peerAddress, peerPort);

                    bConnected = true;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }

            if (args[3] == "client")
            {
                using (Udt.NetworkStream st = new Udt.NetworkStream(client))
                    using (BinaryReader reader = new BinaryReader(st))
                    {
                        while (true)
                        {
                            Console.WriteLine(reader.ReadString());
                        }
                    }
            }
            else
            {
                using (Udt.NetworkStream st = new Udt.NetworkStream(client))
                    using (BinaryWriter writer = new BinaryWriter(st))
                    {
                        int last = Environment.TickCount;

                        while (!Console.KeyAvailable)
                        {
                            if (Environment.TickCount - last < 1000)
                            {
                                continue;
                            }

                            writer.Write(string.Format("[{0}] my local time is {1}",
                                                       Environment.MachineName, DateTime.Now.ToLongTimeString()));

                            last = Environment.TickCount;

                            TraceInfo traceInfo = client.GetPerformanceInfo();

                            Console.WriteLine("Bandwith Mbps {0}", traceInfo.Probe.BandwidthMbps);
                        }
                    }
            }
        }
示例#10
0
        public static void Run(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("Usage: {0} client local_port server server_port [client|server]",
                    System.AppDomain.CurrentDomain.FriendlyName);
                return;
            }

            Udt.Socket client = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);
            client.ReuseAddress = true;

            client.Bind(IPAddress.Any, int.Parse(args[0]));

            IPAddress serverAddress;

            if (!IPAddress.TryParse(args[1], out serverAddress))
            {
                Console.WriteLine("Error trying to parse {0}", args[1]);
                return;
            }

            client.Connect(serverAddress, int.Parse(args[2]));

            int peerPort;
            IPAddress peerAddress;

            // recv the other peer info
            using (Udt.NetworkStream st = new Udt.NetworkStream(client, false))
            using (BinaryReader reader = new BinaryReader(st))
            {
                int len = reader.ReadInt32();

                byte[] addr = reader.ReadBytes(len);

                peerPort = reader.ReadInt32();

                peerAddress = new IPAddress(addr);

                Console.WriteLine("Received peer address = {0}:{1}",
                    peerAddress, peerPort);
            }

            bool bConnected = false;
            int retry = 0;

            while (!bConnected)
            try
            {
                client.Close();

                client = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);
                client.ReuseAddress = true;

                client.SetSocketOption(Udt.SocketOptionName.Rendezvous, true);

                client.Bind(IPAddress.Any, int.Parse(args[0]));

                Console.WriteLine("{0} - Trying to connect to {1}:{2}. ",
                    retry++, peerAddress, peerPort);

                client.Connect(peerAddress, peerPort);

                Console.WriteLine("Connected successfully to {0}:{1}",
                    peerAddress, peerPort);

                bConnected = true;
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }

            if (args[3] == "client")
            {
                using (Udt.NetworkStream st = new Udt.NetworkStream(client))
                using (BinaryReader reader = new BinaryReader(st))
                {
                    while (true)
                    {
                        Console.WriteLine(reader.ReadString());
                    }
                }
            }
            else
            {
                using (Udt.NetworkStream st = new Udt.NetworkStream(client))
                using (BinaryWriter writer = new BinaryWriter(st))
                {
                    int last = Environment.TickCount;

                    while (!Console.KeyAvailable)
                    {
                        if (Environment.TickCount - last < 1000)
                            continue;

                        writer.Write(string.Format("[{0}] my local time is {1}",
                            Environment.MachineName, DateTime.Now.ToLongTimeString()));

                        last = Environment.TickCount;

                        TraceInfo traceInfo = client.GetPerformanceInfo();

                        Console.WriteLine("Bandwith Mbps {0}", traceInfo.Probe.BandwidthMbps);
                    }
                }
            }
        }