TCP網絡程序實例——服務器端與客戶端交互
阿新 • • 發佈:2017-11-20
href tcpclient 端口號 信息 try 本機ip 發送數據 定義 .cn
◆ 服務器端
創建服務器端項目Server,在Main方法中創建TCP連接對象;然後監聽客戶端接入,並讀取接入的客戶端IP地址和傳入的消息;最後向接入的客戶端發送一條信息。代碼如下:
01 namespace Server 02 { 03 class Program 04 { 05 static void Main() 06 { 07 int port = 888; //端口08 TcpClient tcpClient; //創建TCP連接對象 09 IPAddress[] serverIP = Dns.GetHostAddresses("127.0.0.1"); //定義IP地址 10 IPAddress localAddress = serverIP[0]; //IP地址 11 TcpListener tcpListener = newTcpListener(localAddress, port);//監聽套接字 12 tcpListener.Start(); //開始監聽 13 Console.WriteLine("服務器啟動成功,等待用戶接入…"); //輸出消息 14 while (true) 15 { 16 try 17 {18 //每接收一個客戶端則生成一個TcpClient 19 tcpClient = tcpListener.AcceptTcpClient(); 20 NetworkStream networkStream = tcpClient.GetStream();//獲取網絡數據流 21 //定義流數據讀取對象 22 BinaryReader reader = new BinaryReader(networkStream); 23 //定義流數據寫入對象 24 BinaryWriter writer = new BinaryWriter(networkStream); 25 while (true) 26 { 27 try 28 { 29 string strReader = reader.ReadString();//接收消息 30 //截取客戶端消息 31 string[] strReaders = strReader.Split(new char[] { ‘ ‘ }); 32 //輸出接收的客戶端IP地址 33 Console.WriteLine("有客戶端接入,客戶IP:" + strReaders[0]); 34 //輸出接收的消息 35 Console.WriteLine("來自客戶端的消息:" + strReaders[1]); 36 string strWriter = "我是服務器,歡迎光臨";//定義服務端要寫入的消息 37 writer.Write(strWriter); //向對方發送消息 38 } 39 catch 40 { 41 break; 42 } 43 } 44 } 45 catch 46 { 47 break; 48 } 49 } 50 } 51 } 52 }
◆ 客戶端
創建客戶端項目Client,在Main方法中創建TCP連接對象,以指定的地址和端口連接服務器;然後向服務器端發送數據和接收服務器端傳輸的數據。代碼如下:
01 namespace Client 02 { 03 class Program 04 { 05 06 static void Main(string[] args) 07 { 08 //創建一個TcpClient對象,自動分配主機IP地址和端口號 09 TcpClient tcpClient = new TcpClient(); 10 //連接服務器,其IP和端口號為127.0.0.1和888 11 tcpClient.Connect("127.0.0.1", 888); 12 if (tcpClient != null) //判斷是否連接成功 13 { 14 Console.WriteLine("連接服務器成功"); 15 NetworkStream networkStream = tcpClient.GetStream(); //獲取數據流 16 BinaryReader reader = new BinaryReader(networkStream); //定義流數據讀取對象 17 BinaryWriter writer = new BinaryWriter(networkStream); //定義流數據寫入對象 18 string localip="127.0.0.1"; //存儲本機IP,默認值為127.0.0.1 19 IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName()); //獲取所有IP地址 20 foreach (IPAddress ip in ips) 21 { 22 if (!ip.IsIPv6SiteLocal) //如果不是IPV6地址 23 localip = ip.ToString(); //獲取本機IP地址 24 } 25 writer.Write(localip + " 你好服務器,我是客戶端"); //向服務器發送消息 26 while (true) 27 { 28 try 29 { 30 string strReader = reader.ReadString(); //接收服務器發送的數據 31 if (strReader != null) 32 { 33 //輸出接收的服務器消息 34 Console.WriteLine("來自服務器的消息:"+strReader); 35 } 36 } 37 catch 38 { 39 break; //接收過程中如果出現異常,退出循環 40 } 41 } 42 } 43 Console.WriteLine("連接服務器失敗"); 44 } 45 } 46 }
首先運行服務器端,然後運行客戶端,運行客戶端後後的服務器端效果如圖14.12所示,客戶端運行效果如圖14.13所示。
圖14.12 客戶端運行後的服務器端效果 圖14.13 客戶端運行效果
本文出自明日科技最新出版的《零基礎學C#》,轉載請註明版權歸屬!!!
TCP網絡程序實例——服務器端與客戶端交互