C#服務(wù)端與客戶端連接實(shí)現(xiàn)淺談
C#服務(wù)端與客戶端連接實(shí)現(xiàn)的由來:那么既然一個(gè)服務(wù)器端口可以應(yīng)對多個(gè)客戶端連接,那么接下來我們就看一下,如何讓多個(gè)客戶端與服務(wù)端連接。如同我們上面所說的,一個(gè)TcpClient就是一個(gè)Socket,所以我們只要?jiǎng)?chuàng)建多個(gè)TcpClient,然后再調(diào)用Connect()方法就可以了:
C#服務(wù)端與客戶端連接實(shí)現(xiàn)實(shí)例:
- class Client {
- static void Main(string[] args) {
- Console.WriteLine("Client Running ...");
- TcpClient client;
- //C#服務(wù)端與客戶端連接實(shí)現(xiàn)
- for (int i = 0; i <= 2; i++) {
- try {
- client = new TcpClient();
- client.Connect("localhost", 8500); // 與服務(wù)器連接
- } catch (Exception ex) {
- Console.WriteLine(ex.Message);
- return;
- }
- //C#服務(wù)端與客戶端連接實(shí)現(xiàn)
- // 打印連接到的服務(wù)端信息
- Console.WriteLine("Server Connected!{0} --> {1}",
- client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
- }
- // 按Q退出
- }//C#服務(wù)端與客戶端連接實(shí)現(xiàn)
- }
上面代碼最重要的就是client = new TcpClient()這句,如果你將這個(gè)聲明放到循環(huán)外面,再循環(huán)的第二趟就會發(fā)生異常,原因很顯然:一個(gè)TcpClient對象對應(yīng)一個(gè)Socket,一個(gè)Socket對應(yīng)著一個(gè)端口,如果不使用new操作符重新創(chuàng)建對象,那么就相當(dāng)于使用一個(gè)已經(jīng)與服務(wù)端建立了連接的端口再次與遠(yuǎn)程建立連接。
此時(shí),如果在“命令提示符”運(yùn)行“netstat -a”,則會看到類似下面的C#服務(wù)端與客戶端連接實(shí)現(xiàn)實(shí)例的輸出:
- TCPjimmy:8500 0.0.0.0:0 LISTENING
- TCPjimmy:8500 localhost:10282 ESTABLISHED
- TCPjimmy:8500 localhost:10283 ESTABLISHED
- TCPjimmy:8500 localhost:10284 ESTABLISHED
- TCPjimmy:10282localhost:8500 ESTABLISHED
- TCPjimmy:10283localhost:8500 ESTABLISHED
- TCPjimmy:10284localhost:8500 ESTABLISHED
可以看到創(chuàng)建了三個(gè)連接對,并且8500端口持續(xù)保持偵聽狀態(tài),從這里以及上面我們可以推斷出TcpListener的Start()方法是一個(gè)異步方法。
C#服務(wù)端與客戶端連接實(shí)現(xiàn)的情況就向你介紹到這里,希望對你了解和學(xué)習(xí)C#服務(wù)端與客戶端連接實(shí)現(xiàn)有所幫助。
【編輯推薦】