天天看點

c# socket網絡連接配接(伺服器端)

首先我們需要建立一個socket

//定義一個Socket
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           

這三個參數分别是選擇ipv4或者是ipv6,第二個是選擇socket傳輸資料類型 Dgram是資料包UDP協定常用,Stream是資料流,TCP

常用,第三個參數就是選擇網絡協定類型。

接下來我們開始綁定ip和端口号

IPAddress iPAddress = IPAddress.Parse("192.168.1.5");
IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, );
//綁定ip和端口号
serverSocket.Bind(iPEndPoint);
           

将你的IP和端口号綁定上去即可

接下來我們就開始監聽這個socket連接配接的狀态,如果有通信的話我們就可以進行消息處理

//開始監聽端口号
            serverSocket.Listen();
            //接收一個連接配接
            Socket clientSocket = serverSocket.Accept();
            string msg = "Hellow World! 你好";
            //轉換消息
            byte[] data = Encoding.UTF8.GetBytes(msg);
            //發送消息
            clientSocket.Send(data);
           

Listen這個監聽的方法的參數代表等待個數,而不是連接配接個數,0代表沒有等待個數,多少都可以。

然後使用Accept這個方法産生一個新的和用戶端連接配接的socket(如果沒有連接配接,代碼會停留在監聽的的部分等待,直到有用戶端連接配接才會執行下面的代碼)。

後面就是将我們的消息轉換成位元組流發送給用戶端,通過Send()方法,轉換字元串這裡使用了UTF8的格式GetBytes()方法,這個格式可以轉換中文,同樣的接受也需要使用UTF8的格式使用GetString()方法接受。

下面我們就要在伺服器接收用戶端發送的消息了

//接收消息
            byte[] dataBuffer = new byte[];//開辟接收空間
            int count = clientSocket.Receive(dataBuffer);//擷取消息的位元組長度
            string msgReceive = System.Text.Encoding.UTF8.GetString(dataBuffer, , count);//讀取從0開始到位元組長度部分的資料,将多餘的空白位元組踢去

            //輸出接收的資訊
            Console.WriteLine(msgReceive);

                        //關閉連接配接
            clientSocket.Close();//關閉和用戶端Accept産生的Socket連接配接
            serverSocket.Close();//關閉自己的Socket連接配接
           

完整代碼

/// <summary>
        /// 同步接收資料
        /// </summary>
        void StartSeverSync()
        {
            //定義一個Socket
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //本機ip:192.168.1.5

            //  IPAddress iPAddress = new IPAddress (new byte[] { 192,168,1,5 });
            IPAddress iPAddress = IPAddress.Parse("192.168.1.5");

            IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, );
            //綁定ip和端口号
            serverSocket.Bind(iPEndPoint);
            //開始監聽端口号
            serverSocket.Listen();
            //接收一個連接配接
            Socket clientSocket = serverSocket.Accept();

            string msg = "Hellow World! 你好";
            //轉換消息
            byte[] data = Encoding.UTF8.GetBytes(msg);
            //發送消息
            clientSocket.Send(data);

            //接收消息
            byte[] dataBuffer = new byte[];
            int count = clientSocket.Receive(dataBuffer);
            string msgReceive = System.Text.Encoding.UTF8.GetString(dataBuffer, , count);

            Console.WriteLine(msgReceive);
            //關閉連接配接
            clientSocket.Close();
            serverSocket.Close();
        }