コード例 #1
0
        public void StartListening()
        {
            ClientService ClientTask;
            // Client Connections Pool
            ClientConnectionPool ConnectionPool = new ClientConnectionPool();

            // Client Task to handle client requests
            ClientTask = new ClientService(ConnectionPool);
            ClientTask.Start();

            string DataToSend = "";

            new Thread(() =>
            {
                while (DataToSend != "quit")
                {
                    Console.WriteLine("\nType a text to be sent:");
                    DataToSend = Console.ReadLine();
                    if (DataToSend.Length != 0)
                    {
                        ClientTask.BroadcastMsg(DataToSend);
                    }
                }
            }).Start();

            TcpListener listener = new TcpListener(IPAddress.Parse(adress), portNum);

            try
            {
                listener.Start();
                int ClientNbr = 0;
                // Start listening for connections.
                Console.WriteLine("Waiting for a connection...");
                while (true)
                {
                    TcpClient handler = listener.AcceptTcpClient();
                    if (handler != null)
                    {
                        Console.WriteLine("Client#{0} accepted!", ++ClientNbr);
                        // An incoming connection needs to be processed.
                        ConnectionPool.Enqueue(new ClientHandler(handler, ClientTask));
                    }
                    else
                    {
                        break;
                    }
                }
                listener.Stop();
                ClientTask.Stop();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            Console.WriteLine("\nHit enter to continue...");
            Console.Read();
        }