2011-08-15 71 views
1

我打算在TCP/IP模式下設置一個小型客戶端/服務器服務器,我使用VS2010,C#開發我的應用程序,我搜索了很多,可以找到一些源代碼,但他們都沒有在互聯網上工作,我可以在我自己的本地系統中得到一些答案,即我運行我的服務器,然後監聽我自己的本地主機(127.0.0.1),然後發送一些數據(例如使用telnet),它工作正常,但當我通過互聯網做同樣的事情時,我什麼也得不到!我想使用端口80,因爲我想發送/接收HTTP數據,我測試了幾個源代碼,這裏是我使用的最後一個代碼(並且它在localhost上使用telnet工作)tcp/ip客戶端服務器沒有通過互聯網工作

//服務器代碼:

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); 
    } 

發送數據(客戶端),當然我還沒有用過這段代碼,是不是?

 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 ""; 

    } 

我打算讓服務器代碼在我的服務器(winserver 2008R2),但目前在正常的電腦進行測試,我究竟做錯了什麼?我想從隨機系統(使用隨機IP)發送一些http數據包到我的服務器(我知道它的IP),我該怎麼辦?是否有可能與TCP/IP或我應該做別的? 它與靜態IP有關嗎?我應該有靜態IP嗎?我的網絡服務器有一個靜態IP,但我的客戶沒有,這是一個問題? 我想我在定義端口和IP時遇到了一些問題,我應該如何設置它們?我的服務器有一個特定的IP,但我不知道我的客戶的IP,請你一步一步向我解釋一下嗎? 感謝

回答

2

在這種情況下這兩個最常見的問題:

  1. 確保你的服務器的路由器使用port forwarding轉發從路由器到服務器的HTTP請求。
  2. 確保您連接到服務器的public IP address,而不是其本地網絡地址。
+0

謝謝,但我怎麼知道服務器路由器?我可以使用自己的PC作爲我的測試服務器嗎?這樣我如何測試路由器?服務器公共IP地址是什麼意思?我怎麼找到它? –

+1

查看鏈接已添加到答覆。 –

+0

謝謝,但我找不到明確的答案,有沒有一個很好的教程/示例顯示的東西在網上工作? –

相關問題