2016-01-01 129 views
3

作爲C#網絡的初學者,我編寫了一個簡單的Client-Server應用程序。我正在連接到服務器正在偵聽的本地IP地址和端口8080。RemoteEndPoint與LocalEndPoint

在客戶端:

 IPAddress remoteaddr = IPAddress.Parse("127.0.0.1"); 
     int port = 8880; 
     TcpClient tcpclient = new TcpClient(); 
     tcpclient.Connect(remoteaddr, port); 
     NetworkStream networkstream = tcpclient.GetStream(); 

     IPEndPoint RemAddr = (IPEndPoint)tcpclient.Client.RemoteEndPoint; 
     IPEndPoint LocAddr = (IPEndPoint)tcpclient.Client.LocalEndPoint; 

     if (RemAddr != null) 
     { 
      // Using the RemoteEndPoint property. 
      Console.WriteLine("I am connected to " + RemAddr.Address + "on port number " + RemAddr.Port); 
     } 

     if (LocAddr != null) 
     { 
      // Using the LocalEndPoint property. 
      Console.WriteLine("My local IpAddress is :" + LocAddr.Address + "I am connected on port number " + LocAddr.Port); 
     } 

輸出爲:

I am connected to 127.0.0.1 on port number 8880 
My local IpAddress is :127.0.0.1 I am connected on port number 46715 

所以有什麼RemoteEndPoint和LocalEndPoint之間的區別? LocalEndPoint端口的用途是什麼(在我的例子中是46715),它來自哪裏? 謝謝。

+0

TCP套接字是一種雙面連接 - 本地端點是您的客戶端,遠程端點是服務器端 - 服務器與客戶端恰好在同一硬件上並不意味着您仍然沒有兩端管道。本地端口號由TCP堆棧在連接時決定。 –

+1

[這個問題]的答案(https://stackoverflow.com/questions/13190176/how-does-port-number-really-work-in-tcp)可能會幫助你,你的問題不太專用於.Net 'TcpClient'類和更一般的TCP/IP如何工作。 –

回答

1

遠程端點會告訴你哪個客戶端(IP)連接到你的本地終點(即更可能是服務器的ip 127.0.0.1)