using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.IO;

public class HttpServer
{
   public static void Main()
   {
      IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 80);

      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.
         HttpListener listener = new HttpListener(client);
         Thread thread = new Thread(new ThreadStart(listener.run));
         thread.Start();
      }
//	  newsock.Close();
   }
}

public class HttpListener {
   Socket socket;

   public HttpListener(Socket s)
   {
      socket = s;
   }

   public void run() 
   {
	   String msg = "Hello!";
	   String helloMsg = @"HTTP/1.0 200 OK\nContent-Type: text/plain\nContgent-Length: "+msg.Length+"\n\n"+msg;

	   NetworkStream stream = new NetworkStream(socket);
	   StreamReader reader = new StreamReader(stream);
	   String header = "";
	   while (true) 
	   {
		   String line = reader.ReadLine();
		   Console.WriteLine(line);
		   if (line.Trim().Length==0)
			   break;
		   header += line+"\n";
	   }
	   socket.Send(Encoding.UTF8.GetBytes(helloMsg));
       socket.Close();
   }
}