Socket通訊簡易學習
阿新 • • 發佈:2018-12-10
Socket開啟通訊通道,告訴本地機器,願意在該通道上接受客戶請求——監聽,等待客戶請求——接受請求,建立專用連結進行讀寫——處理完畢,關閉專用連結——關閉通訊通道(當然其中監聽到關閉專用連結可以重複迴圈)
Ø 客戶端:開啟通訊通道,連線伺服器——資料互動——關閉通道。
服務端server程式碼
1 try 2 { 3 bool types = true; 4 while (types != false) 5 { 6 7View Codeint port = 2000; 8 9 string host = "127.0.0.1"; 10 11 IPAddress ip = IPAddress.Parse(host); 12 13 IPEndPoint ipe = new IPEndPoint(ip, port); 14 15 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立一個Socket類 16 17 s.Bind(ipe);//繫結2000埠 18 19 s.Listen(0);//開始監聽 20 21 Console.WriteLine("等待與我配對"); 22 23 Socket temp = s.Accept();//為新建連線建立新的Socket。 24 25 Console.WriteLine("正在配對.."); 26 27 stringrecvStr = ""; 28 29 byte[] recvBytes = new byte[1024]; 30 31 int bytes; 32 33 bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//從客戶端接受資訊 34 35 // recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); 36 //recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes); 37 recvStr += Encoding.UTF8.GetString(recvBytes,0,bytes); 38 39 // recvStr+= Encoding.Unicode.GetChars(recvBytes); 40 Console.WriteLine("配對人跟我講:{0}", recvStr);//把客戶端傳來的資訊顯示出來 41 42 string sendStr = "我回配對人說可以配對Ok!Client Send Message Sucessful!"; 43 44 byte[] bs = Encoding.UTF8.GetBytes(sendStr); 45 46 temp.Send(bs, bs.Length, 0);//返回客戶端成功資訊 47 48 temp.Close(); 49 50 s.Close(); 51 } 52 53 } 54 55 catch (ArgumentNullException e) 56 { 57 58 Console.WriteLine("ArgumentNullException: {0}", e); 59 } 60 61 catch (SocketException e) 62 { 63 64 Console.WriteLine("SocketException: {0}", e); 65 } 66 67 Console.WriteLine("Press Enter to Exit"); 68 69 Console.ReadLine();
客戶端Client程式碼
1 try 2 { 3 4 int port = 2000; 5 6 string host = "127.0.0.1"; 7 8 IPAddress ip = IPAddress.Parse(host); 9 10 IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和埠轉化為IPEndPoint例項 11 12 Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立一個Socket 13 14 Console.WriteLine("正在連線配對..."); 15 16 c.Connect(ipe);//連線到伺服器 17 18 string sendStr = "你好,我是hello!This is a socket test"; 19 Encoding.Unicode.GetBytes(sendStr); 20 // byte[] bs = Encoding.ASCII.GetBytes(sendStr); 21 byte[] bs = Encoding.UTF8.GetBytes(sendStr); 22 23 Console.WriteLine("Send Message"); 24 25 c.Send(bs, bs.Length, 0);//傳送測試資訊 26 27 string recvStr = ""; 28 29 byte[] recvBytes = new byte[1024]; 30 31 int bytes; 32 33 bytes = c.Receive(recvBytes, recvBytes.Length, 0);//從伺服器端接受返回資訊 34 35 recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes); 36 37 Console.WriteLine("客戶端接收到伺服器說:{0}", recvStr);//顯示伺服器返回資訊 38 39 c.Close(); 40 41 Console.WriteLine("下面開始正常對話……"); 42 bool trys = true; 43 44 while (trys != false) 45 { 46 bs = null; 47 string pika= Console.ReadLine(); 48 bs= Encoding.UTF8.GetBytes(pika); 49 50 c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立一個Socket 51 52 c.Connect(ipe);//連線到伺服器 53 c.Send(bs, bs.Length, 0);//傳送測試資訊 54 string recvStr1 = ""; 55 56 byte[] recvBytes1 = new byte[1024]; 57 58 int bytes1; 59 60 bytes1 = c.Receive(recvBytes1, recvBytes1.Length, 0);//從伺服器端接受返回資訊 61 62 recvStr1 += Encoding.UTF8.GetString(recvBytes1, 0, bytes1); 63 64 Console.WriteLine("客戶端接收到伺服器說:{0}", recvStr1);//顯示伺服器返回資訊 65 66 c.Close(); 67 } 68 69 } 70 71 catch (ArgumentNullException e) 72 { 73 74 Console.WriteLine("ArgumentNullException: {0}", e); 75 76 } 77 78 catch (SocketException e) 79 { 80 81 Console.WriteLine("SocketException: {0}", e); 82 83 } 84 85 Console.WriteLine("Press Enter to Exit"); 86 87 Console.ReadLine();View Code
其中有程式碼Encoding.UTF8
這一塊是設定編碼,使用Unicode再用中文的時候會發生亂碼????類試與這一的,編碼服務端跟客戶端必須一致,不然也會出現亂碼行為,不過咱這一般都用Encoding.UTF8就OK的啦