◇TcpListener 用於阻止同步模式下偵聽和接受傳入連接請求。(用於偵聽)
◇我們先來做一件事情,對本地機器上某一端口的偵聽。
◇因為如果想要與外界進行通信,第一件要做的事情就是開啟對端口的偵聽,這就像為計算機打開了一個“門”,所有向這個“門”發送的請求(“敲門”)都會被系統接收到。
◇在C#中可以通過下面幾個步驟完成,首先使用本機Ip地址和端口號創建一個System.Net.Sockets.TcpListener類型的實例,然后在該實例上調用Start()方法,從而開啟對指定端口的偵聽。
◇創建一個控制台程序,名為MyTcpListener具體代碼,如下:
1 using System.Net; // 引入這兩個命名空間,以下同 2 using System.Net.Sockets; 3 using ... // 略 4 5 class Server { 6 static void Main(string[] args) { 7 Console.WriteLine("Server is running ... "); 8 IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 }); 9 TcpListener listener = new TcpListener(ip, 8500); 10 11 listener.Start(); // 開始偵聽 12 Console.WriteLine("Start Listening ..."); 13 14 Console.WriteLine("\n\n輸入\"Q\"鍵退出。"); 15 ConsoleKey key; 16 do { 17 key = Console.ReadKey(true).Key; 18 } while (key != ConsoleKey.Q); 19 } 20 }
◇說明:我們利用TcpListener類的構造函數,實例化出了一個listener對象,監聽了127.0.0.1(也就是本地機器)的8500端口。我們可以在“運行——》cmd——》利用命令netstate -an”來查看我們當前機器所監聽的狀態(可以找到這個8500端口),這里就不演示了。
◇TcpClient類是用於在同步阻塞模式下通過網絡來連接、發送和接受數據流。(用於請求)
◇每創建一個新的TcpClient便相當於創建了一個新的套接字Socket去與服務端通信,.Net會自動為這個套接字分配一個端口號,上面說過,TcpClient類不過是對Socket進行了一個包裝。創建TcpClient類型實例時,可以在構造函數中指定遠程服務器的地址和端口號。這樣在創建的同時,就會向遠程服務端發送一個連接請求(“握手”),一旦成功,則兩者間的連接就建立起來了。也可以使用重載的無參數構造函數創建對象,然后再調用Connect()方法,在Connect()方法中傳入遠程服務器地址和端口號,來與服務器建立連接。
◇創建一個控制台程序,名為MyTcpClient,具體代碼如下:
1 class Client { 2 static void Main(string[] args) { 3 4 Console.WriteLine("Client Running ..."); 5 TcpClient client = new TcpClient(); 6 try { 7 client.Connect("localhost", 8500); // 與服務器連接 8 } catch (Exception ex) { 9 Console.WriteLine(ex.Message); 10 return; 11 } 12 // 打印連接到的服務端信息 13 Console.WriteLine("Server Connected!{0} --> {1}", 14 client.Client.LocalEndPoint, client.Client.RemoteEndPoint); 15 16 // 按Q退出 17 } 18 }
◇說明:其中Connect()方法中的參數就是需要連接主機的ip地址號以及端口號。
◇這時候我們就可以先運行MyTcpListener(不要關掉),然后再運行MyTcpClient,看看運行的結果如何。
