using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

public class TcpServer
{
   public static void Main()
   {
      IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 20);

      Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

      newsock.Bind(ipep);
      newsock.Listen(10);
	  
      while(true)
      {
		Socket client = newsock.Accept();
		IPEndPoint clientep = (IPEndPoint) client.RemoteEndPoint;
         
         // create a new thread and then receive message.
         TcpListener listener = new TcpListener(client);
         Thread thread = new Thread(new ThreadStart(listener.run));
         thread.Start();
      }
//	  newsock.Close();
   }
}

public class TcpListener {
   Socket socket;

   public TcpListener(Socket s)
   {
      socket = s;
   }

   public void run() 
   {
      while (true) 
      {
         byte[] data = new byte[1024];
         int recv = socket.Receive(data);
         if (recv == 0) break;
         Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));
      }
      socket.Close();
   }
}
