static void Main(string[] args) { Console.WriteLine("Server Started..."); MessageHandler msgHandler = new MessageHandler(); var port = Shared.port; // Create single TcpListener var listener = new TcpListener (IPAddress.Any, port); listener.Start(); new Thread(PingClients).Start(msgHandler); while (true) { // Wait for client connection (accept socket) var socket = listener.AcceptSocket(); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, SOCKET_TIMEOUT); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, SOCKET_TIMEOUT); // Create stream var stream = new NetworkStream(socket); // Create reader var streamr = new StreamReader(stream); // Create writer var streamw = new StreamWriter(stream); streamw.AutoFlush = true; // Add new client to MessageHandler msgHandler.AddClient(streamw, socket); // Create a thread that handles reading from the client (pass the reader) var thread = new Thread (HandleClient); thread.Start(Tuple.Create<StreamReader, MessageHandler, Socket>(streamr, msgHandler, socket)); } }