title: tcp/ip client server not working over internet
body: <p>I'm going to setup a small client/server server in TCP/IP mode, I use VS2010,C# to develop my apps, I've googled a lot and could find some source codes, but none of them work in internet, I can get some answers in my own local system, i.e. I run my server, then listen for my own localhost (127.0.0.1) then send some data (for example using telnet), it works fine but when I do the same over internet I get nothing! I want to use port 80, as I want to send/receive http data, I have tested several source codes, here is the last code I have used (and it works on localhost with telnet)</p>
  
  <p>//server code:</p>
  
  <pre><code>form_load()
      IPAddress localAddress = IPAddress.Parse("127.0.0.1");
                  Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
              IPEndPoint ipEndpoint = new IPEndPoint(localAddress, 80);
  
              // Bind the socket to the end point
              listenSocket.Bind(ipEndpoint);
  
              // Start listening, only allow 1 connection to queue at the same time
              listenSocket.Listen(1);
              listenSocket.BeginAccept(new AsyncCallback(ReceiveCallback), listenSocket);
              Console.WriteLine("Server is waiting on socket {0}", listenSocket.LocalEndPoint);
  
              // Start being important while the world rotates
              while (true)
              {
                   Console.WriteLine("Busy Waiting....");
                  Thread.Sleep(2000);
              }
  
          public static void ReceiveCallback(IAsyncResult AsyncCall)
      {
           System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
          Byte[] message = encoding.GetBytes("I am a little busy, come back later!");
  
          Socket listener = (Socket)AsyncCall.AsyncState;
          Socket client = listener.EndAccept(AsyncCall);
  
          Console.WriteLine("Received Connection from {0}", client.RemoteEndPoint);
          client.Send(message);
  
          Console.WriteLine("Ending the connection");
          client.Close();
          listener.BeginAccept(new AsyncCallback(ReceiveCallback), listener);
      }
  </code></pre>
  
  <p>send data (client), of course I haven't used this code, is it right?</p>
  
  <pre><code>        public static string SendData()
      {
          TcpClient client = new TcpClient();
          client.Connect(IP, 80);
          StreamWriter sw = new StreamWriter(client.GetStream());
          StreamReader sr = new StreamReader(client.GetStream());
  
          //if statement evalutes to see if the user has selected to update the server
          //" " = update server
          //"" = do not update the server
          //if (updateData.Equals(""))
          //{
          //    space = "";
          //}
          //else if (!updateData.Equals(""))
          //{
          //    space = " ";
          //}
          //Refrences stream writer, username variable passed in from GUI
          //space variable provides update function: "" = dont update. " " = update database.
          sw.WriteLine("h");
          sw.Flush();
          //data send back from the server assigned to string variable 
          //string recieved = sr.ReadLine();
          return "";
  
      }
  </code></pre>
  
  <p>I'm going to have the server code in my Server (winserver 2008R2) but currently test it in normal PCs, what am I doing wrong? I want to send some http packet from a random system (with a random IP) to my server (which I know its IP), what should I do? is it possible with tcp/ip or I should do something else?
  is it related to static IP? should I certainly have static IP? my web server has a static IP but my clients do not, is it a problem?
  I think I have some problem in defining ports and IPs, how should I set them? my server has a specific IP, but I don't know IP of my clients, would you please explain it to me step by step?
  thanks</p>