淺談C#Socket

好不容易把socket通訊搞懂一點,比較喜歡作筆記,嘿嘿~html

但願共同窗習,共同進步!

socket通訊是C#中很是基礎的一個知識點,我這裏用到的是基於Tcp協議的socket通訊。Tcp會有三次握手鍊接通訊.數組

 1、 建立服務端socket步驟:網絡

      1.首先須要引用socket通訊中所用到的名稱空間;socket

         

using System.Net;
using System.Threading;
using System.Net.Sockets;

         這三個名稱空間是爲socket通訊打基礎,沒有這三個名稱空間沒法實現socket通訊.tcp

      2.接下來就是要建立一個socket的對象了,建立socket對象是爲了方便客戶端與服務端之間的通訊,若是你還不明白,就請往下繼續看;post

Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

         在這裏面有幾個知識點我要補充一下:學習

         socket類中的參數我作簡要闡述,AddressFamily.InterNetwork簡單來講就是使用內網,啥,你不知道內網是什麼東東?至於內網是啥,內網就是不能上互聯網的局域網;SocketType.Stream是流式的套接字類型,這種套接字類型是一種可靠且雙向,基於鏈接的字節流,不重複數據,簡單一點就是支持雙向通訊;ProtocolType.Tcp指的是使用基於tcp協議的通訊協議。url

      3.綁定IP地址和端口號;spa

            //將字符串類型的IP地址轉換爲IPAddress類型
            IPAddress ip = IPAddress.Parse("173.168.5.15");
            //標識網絡地址
            EndPoint point = new IPEndPoint(ip,port);
            serverSocket.Bind(point);

 若是你想實現socket通訊就必須綁定IP地址和端口號,IP地址是計算機的通訊地址,端口號指向計算機中某個軟件或者說是應用程序;線程

      4.監聽客戶端的鏈接;

serverSocket.Listen(10);

        參數指的是監聽客戶端的最大數量。

      5.爲鏈接到的客戶端新建一個socket;

Socket ListenClientSocket= serverSocket.Accept();

       這是規定,若是不新建一個socket沒法通訊。   

       這一步完成時客戶端給服務端發送消息且客戶端會鏈接到服務端,完成第一次握手。

      6.向客戶端發送消息;

ListenClientSocket.Send(data);

       此時服務端給客戶端發送消息完成第二次握手。

      7.接受客戶端消息;

            byte[] data2 = new byte[1024];

            int length=ListenClientSocket.Receive(data2);
            string message2=Encoding.UTF8.GetString(data2,0,length);
            Console.WriteLine("接收到客戶端傳來的消息:"+message2);

        服務端接收到客戶端的消息完成第三次握手。

 

        服務端socket   完整代碼以下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Net;
 7 using System.Threading;
 8 using System.Net.Sockets;
 9 
10 namespace serverSocketTest2
11 {
12     class Program
13     {
14         static int port = 3500;
15         static void Main(string[] args)
16         {
17             //建立一個socket的對象
18             Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
19             //將字符串類型的IP地址轉換爲IPAddress類型
20             IPAddress ip = IPAddress.Parse("173.168.5.15");
21             //標識網絡地址
22             EndPoint point = new IPEndPoint(ip,port);
23             serverSocket.Bind(point);
24             //開始監聽
25             serverSocket.Listen(10);
26             Console.WriteLine("等待客戶端鏈接...");
27 
28             //爲鏈接客戶端須要新建一個線程
29             Socket ListenClientSocket= serverSocket.Accept();//暫停當前線程,等待客戶端鏈接以後再執行以後的語句
30             Console.WriteLine("客戶端鏈接成功!  真是使人振奮!");
31             //傳送的消息
32             string message = "Hello Client!";
33             //將字符串類型的數據轉換爲byte類型的數組
34             byte[] data=Encoding.UTF8.GetBytes(message);
35             //發送消息
36             ListenClientSocket.Send(data);
37 
38             /////接受客戶端數據
39             byte[] data2 = new byte[1024];
40 
41             int length=ListenClientSocket.Receive(data2);
42             string message2=Encoding.UTF8.GetString(data2,0,length);
43             Console.WriteLine("接收到客戶端傳來的消息:"+message2);
44 
45             Console.ReadKey();
46         }
47     }
48 }

     

 2、 建立客戶端socket步驟以下:

       1.引用進行socket通訊的名稱空間;

 

using System.Net;
using System.Threading;
using System.Net.Sockets;

       緣由我再也不贅述了,相信聰明的大家都懂.

       2.客戶端向服務端發送鏈接的請求,創建客戶端和服務端的鏈接;

clientSocket.Connect(ip,port);

       這是第一次握手。本次握手與服務端裏的第一次握手同步執行,其實此次握手也是服務端裏的第一次握手。

       3.接收數據;

clientSocket.Receive(data);

       在這裏須要將客戶端接收到的數據返回一個長度並存儲到byte數組裏。

       4.將字節型數據轉換成字符串型的數據;

string message=Encoding.UTF8.GetString(data,0,length);

       5.發送數據

clientSocket.Send(data2);

       第二次握手鍊接。本次握手與服務端裏的第二次握手同步執行,其實此次握手也是服務端裏的第二次握手。

 

        客戶端socket   完整代碼以下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Net;
 7 using System.Threading;
 8 using System.Net.Sockets;
 9 
10 namespace clientSocketTest2
11 {
12     class Program
13     {
14         static int port = 3500;
15         static void Main(string[] args)
16         {
17             //新建一個socket
18             Socket clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
19             IPAddress ip = IPAddress.Parse("173.168.5.15");
20             
21             //客戶端向服務端發送鏈接的請求,創建客戶端和服務端的鏈接
22             clientSocket.Connect(ip,port);
23             //存儲數據,接收數據
24             byte[] data=new byte[1024];
25             int length=clientSocket.Receive(data);
26             //轉換爲字符串型的數據
27             string message=Encoding.UTF8.GetString(data,0,length);//0,length 表示的是發送的數據的長度
28             Console.WriteLine("接收到來自服務端的數據:"+message);
29 
30             ///////   發送數據
31             string message2 = Console.ReadLine();
32             byte[] data2=Encoding.UTF8.GetBytes(message2);
33             clientSocket.Send(data2);
34 
35             Console.ReadKey();
36 
37         }
38     }
39 }

 

     這是個人理解,若是有不足的地方,請指教,共同窗習!但願共同進步!

相關文章
相關標籤/搜索