C# Socket 簡單的控制台案例

來源:互聯網
上載者:User

標籤:turn   並且   返回   send   接收   建立   程式   prot   while   

一、伺服器端

1. 執行個體化並設定socket執行個體對象

    a.建立ip地址和連接埠

    b.綁定監聽地址

    c.設定一下允許同時訪問數

2. 監聽串連

    a.通過啟動一個新的線程執行,這樣主線程不會假死(啟動線程,所帶的參數必須是object類型)

    b.利用迴圈等待串連並返回一個負責通訊的socket執行個體

    c.返回的socket執行個體中可以擷取到所串連客服的IP地址

3. 接收客服的發送過來的訊息

    a.在監聽方法中啟動一個新的線程執行

    b.利用迴圈擷取發送過來的訊息,調用擷取訊息的方法需要傳遞一個位元組變數參數,作為容器。方法傳回值為int,表示擷取到的有效位元組數

    c.如果有效位元組數為0則跳出迴圈

    d.接收到訊息給客服的返回訊息

4. 控制台程式伺服器端代碼

using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;namespace ServerSocket{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("Hello World!");            Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);            IPAddress ip = IPAddress.Any;            IPEndPoint point = new IPEndPoint(ip, 2333);            //socket綁定監聽地址            serverSocket.Bind(point);            Console.WriteLine("Listen Success");            //設定同時串連個數            serverSocket.Listen(10);            //利用線程後台執行監聽,否則程式會假死            Thread thread = new Thread(Listen);            thread.IsBackground = true;            thread.Start(serverSocket);            Console.Read();        }        /// <summary>        /// 監聽串連        /// </summary>        /// <param name="o"></param>        static void Listen(object o)        {            var serverSocket = o as Socket;            while (true)            {                //等待串連並且建立一個負責通訊的socket                var send = serverSocket.Accept();                //擷取連結的IP地址                var sendIpoint = send.RemoteEndPoint.ToString();                Console.WriteLine($"{sendIpoint}Connection");                //開啟一個新線程不停接收訊息                Thread thread = new Thread(Recive);                thread.IsBackground = true;                thread.Start(send);            }        }        /// <summary>        /// 接收訊息        /// </summary>        /// <param name="o"></param>        static void Recive(object o)        {            var send = o as Socket;            while (true)            {                //擷取發送過來的訊息容器                byte[] buffer = new byte[1024 * 1024 * 2];                var effective = send.Receive(buffer);                //有效位元組為0則跳過                if (effective == 0)                {                    break;                }                var str = Encoding.UTF8.GetString(buffer,0, effective);                Console.WriteLine(str);

           var buffers = Encoding.UTF8.GetBytes("Server Return Message");
           send.Send(buffers);

            }        }    }}

二、用戶端

1. 執行個體化並進行串連socket執行個體對象

    a.建立ip地址和連接埠(伺服器的IP和連接埠)

    b.與伺服器端建立連結

2. 接收伺服器發送的訊息

    a.啟動一個新的線程執行

    b.利用迴圈擷取發送過來的訊息,調用擷取訊息的方法需要傳遞一個位元組變數參數,作為容器。方法傳回值為int,表示擷取到的有效位元組數

    c.如果有效位元組數為0則跳出迴圈

3. 給伺服器發送訊息

    a. 調用socket對象的send()方法直接發送

4. 控制台程式用戶端代碼

using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;namespace SocketClient{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("Hello World!");            //建立執行個體            Socket socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp);            IPAddress ip = IPAddress.Parse("192.168.0.111");            IPEndPoint point = new IPEndPoint(ip, 2333);            //進行串連            socketClient.Connect(point);                        //不停的接收伺服器端發送的訊息            Thread thread = new Thread(Recive);            thread.IsBackground = true;            thread.Start(socketClient);            //不停的給伺服器發送資料            int i = 0;            while (true)            {                i++;                var buffter = Encoding.UTF8.GetBytes($"Test Send Message:{i}");                var temp = socketClient.Send(buffter);                Thread.Sleep(1000);            }                    }        /// <summary>        /// 接收訊息        /// </summary>        /// <param name="o"></param>        static void Recive(object o)        {            var send = o as Socket;            while (true)            {                //擷取發送過來的訊息                byte[] buffer = new byte[1024 * 1024 * 2];                var effective = send.Receive(buffer);                if (effective == 0)                {                    break;                }                var str = Encoding.UTF8.GetString(buffer, 0, effective);                Console.WriteLine(str);            }        }    }}

 

C# Socket 簡單的控制台案例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.