C# Socket實現簡單控制台案例

來源:互聯網
上載者:User
這篇文章主要為大家分享了C# Socket簡單的控制台案例,具有一定的參考價值,感興趣的小夥伴們可以參考一下

一、伺服器端

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);   }  } }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.