using System;  
    using System.Net;  
    using System.Net.Sockets;  
    using System.Text;  
      
    // Socket Listener acts as a server and listens to the incoming   
    // messages on the specified port and protocol.  
    public class SocketListener  
    {  
        public static int Main(String[] args)  
        {  
            StartServer();  
            Console.WriteLine("\n Press any key to continue...");  
            Console.ReadKey();  
            return 0;  
        }  
      
         
        public static void StartServer()  
        {  
            // Get Host IP Address that is used to establish a connection  
            // In this case, we get one IP address of localhost that is IP : 127.0.0.1  
            // If a host has multiple addresses, you will get a list of addresses  
            // IPHostEntry host = Dns.GetHostEntry("localhost");  
            // IPAddress ipAddress = host.AddressList[0];  
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);    
            
      
            try {   
      
                // Create a Socket that will use Tcp protocol      
                Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);  
                // A Socket must be associated with an endpoint using the Bind method  
                listener.Bind(localEndPoint);  
                // Specify how many requests a Socket can listen before it gives Server busy response.  
                // We will listen 10 requests at a time  
                listener.Listen(10);  
      
                Console.WriteLine("Waiting for a connection...");  
                Socket handler = listener.Accept();  
      
                 // Incoming data from the client.    
                 string data = null;  
                 byte[] bytes = null;  
      
                while (true)  
                {  
                    bytes = new byte[1024];  
                    int bytesRec = handler.Receive(bytes);  
                    data += Encoding.ASCII.GetString(bytes, 0, bytesRec);  
                    if (data.IndexOf("<EOF>") > -1)  
                    {  
                        break;  
                    }  
                }  
      
                Console.WriteLine("Text received : {0}", data);  
      
                byte[] msg = Encoding.ASCII.GetBytes(data);  
                handler.Send(msg);  
                handler.Shutdown(SocketShutdown.Both);  
                handler.Close();  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine(e.ToString());  
            }  
        }          
    }