1. 程式人生 > >Socket通訊簡易學習

Socket通訊簡易學習

Socket開啟通訊通道,告訴本地機器,願意在該通道上接受客戶請求——監聽,等待客戶請求——接受請求,建立專用連結進行讀寫——處理完畢,關閉專用連結——關閉通訊通道(當然其中監聽到關閉專用連結可以重複迴圈)

Ø  客戶端:開啟通訊通道,連線伺服器——資料互動——關閉通道。

服務端server程式碼

 1  try
 2             {
 3                 bool types = true;
 4                 while (types != false)
 5                 {
 6 
 7
int 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 string
recvStr = ""; 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();
View Code

客戶端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的啦