原文地址如下:
代碼環境:VS2010+Win8.1企業評估版+Framework4.0
C#套接字編程由兩部分組成。
1、C#服務端套接字程序
2、C#客戶端套接字程序
服務端套接字編程
這里的服務端套接字程序是基於c#的控制台程序,實際上該程序作為一個服務端監聽客戶端的請求。這里我們為服務端套接字指定了端口號8888,他是C#類TcpListener的一個實例,通過該實例調用start()方法。
TcpListener serverSocket = new TcpListener(8888); serverSocket.Start();
下一步就是創建一個無限循環來監聽客戶端那邊的請求。當服務端套接字接受來自客戶端的請求的時候,他會從網絡流里讀取數據,也會向網絡流里寫入他對客戶端的響應。從下面的C#程序里你會了解如何使用C#創建一個服務端套接字程序。創建一個新的控制台程序項目並將下面的源碼放進項目里。
TcpListener serverSocket = new TcpListener(8888); int requestCount = 0; TcpClient clientSocket = default(TcpClient); serverSocket.Start(); Console.WriteLine(" >> Server Started"); clientSocket = serverSocket.AcceptTcpClient(); Console.WriteLine(" >> Accept connection from client"); requestCount = 0; while ((true)) { try { requestCount = requestCount + 1; NetworkStream networkStream = clientSocket.GetStream(); //為什么是65536,因為ReceiveBufferSize大小是65536,設置其大小時未起到作用 //暫時就先用其默認大小 byte[] bytesFrom = new byte[65536]; networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$")); Console.WriteLine(" >> Data from client - " + dataFromClient); string serverResponse = "Server response " + Convert.ToString(requestCount); Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse); networkStream.Write(sendBytes, 0, sendBytes.Length); networkStream.Flush(); Console.WriteLine(" >> " + serverResponse); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } clientSocket.Close(); serverSocket.Stop(); Console.WriteLine(" >> exit"); Console.ReadLine();
客戶端套接字編程
C#客戶端套接字編程是C#套接字編程的第二部分。該客戶端套接字程序是基於窗體應用程序的。客戶端連接到服務端套接字程序的端口8888上,因為服務端和客戶端運行在同一台機器上,所以我們給出IP地址(主機名)為127.0.0.1。
clientSocket.Connect("127.0.0.1", 8888);
當C#客戶端程序啟動時,他將連接服務端套接字程序並開始從網絡流里讀取數據和向網絡流里寫入數據。啟動客戶端程序時你會獲得一個消息提示“客戶端已啟動”。當你按下客戶端窗體底部的按鈕時,他將向服務端發送一個消息並且接收來自服務端的響應。
程序使用:
先啟動服務器端如圖:
再啟動客戶端如圖:
點擊底部的button按鈕即可通信。