C#服務(wù)端與客戶端通信淺析
C#服務(wù)端與客戶端通信的建立:上面服務(wù)端、客戶端的代碼已經(jīng)建立起了連接,這通過使用“netstat -a”命令,從端口的狀態(tài)可以看出來,但這是操作系統(tǒng)告訴我們的。那么我們現(xiàn)在需要知道的就是:服務(wù)端的程序如何知道已經(jīng)與一個客戶端建立起了連接?
服務(wù)器端開始偵聽以后,可以在TcpListener實例上調(diào)用AcceptTcpClient()來獲取與一個客戶端的連接,它返回一個TcpClient類型實例。此時它所包裝的是由服務(wù)端去往客戶端的Socket,而我們在客戶端創(chuàng)建的TcpClient則是由客戶端去往服務(wù)端的。這個方法是一個同步方法(或者叫阻斷方法,block method),意思就是說,當(dāng)程序調(diào)用它以后,它會一直等待某個客戶端連接,然后才會返回,否則就會一直等下去。這樣的話,在調(diào)用它以后,除非得到一個客戶端連接,不然不會執(zhí)行接下來的代碼。一個很好的類比就是Console.ReadLine()方法,它讀取輸入在控制臺中的一行字符串,如果有輸入,就繼續(xù)執(zhí)行下面代碼;如果沒有輸入,就會一直等待下去。
C#服務(wù)端與客戶端通信實現(xiàn)實例:
- class Server {
- static void Main(string[] args) {
- Console.WriteLine("Server is running ... ");
- IPAddress ip = new IPAddress(
- new byte[] { 127, 0, 0, 1 });
- TcpListener listener = new TcpListener(ip, 8500);
- listener.Start(); // 開始偵聽
- Console.WriteLine("Start Listening ...");
- // 獲取一個連接,中斷方法
- TcpClient remoteClient = listener.AcceptTcpClient();
- // 打印連接到的客戶端信息
- Console.WriteLine("Client Connected!{0} <-- {1}",
- remoteClient.Client.LocalEndPoint,
- remoteClient.Client.RemoteEndPoint);
- // 按Q退出
- }
- }
運行這段C#服務(wù)端與客戶端通信實現(xiàn)代碼,會發(fā)現(xiàn)服務(wù)端運行到listener.AcceptTcpClient()時便停止了,并不會執(zhí)行下面的Console.WriteLine()方法。為了讓它繼續(xù)執(zhí)行下去,必須有一個客戶端連接到它,所以我們現(xiàn)在運行客戶端,與它進行連接。簡單起見,我們只在客戶端開啟一個端口與之連接:
- class Client {
- static void Main(string[] args) {
- Console.WriteLine("Client Running ...");
- TcpClient client = new TcpClient();
- try {
- client.Connect("localhost", 8500); // 與服務(wù)器連接
- } catch (Exception ex) {
- Console.WriteLine(ex.Message);
- return;
- }
- // 打印連接到的服務(wù)端信息
- Console.WriteLine("Server Connected!{0} --> {1}",
- client.Client.LocalEndPoint,
- client.Client.RemoteEndPoint);
- // 按Q退出
- }
- }
此時C#服務(wù)端與客戶端通信實現(xiàn),服務(wù)端、客戶端的輸出分別為:
- // 服務(wù)端
- Server is running ...
- Start Listening ...
- Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5188
- // 客戶端
- Client Running ...
- Server Connected!127.0.0.1:5188 --> 127.0.0.1:8500
C#服務(wù)端與客戶端通信的基本情況就向你介紹到這里,希望對你了解和學(xué)習(xí)C#服務(wù)端與客戶端通信實現(xiàn)有所幫助。
【編輯推薦】