国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 00:40:43
字體:
來源:轉載
供稿:網友

一、服務器端

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);   }  } }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平潭县| 洛阳市| 年辖:市辖区| 诏安县| 镇雄县| 山阳县| 东明县| 高邑县| 花莲市| 大连市| 德钦县| 油尖旺区| 锡林浩特市| 宾川县| 广河县| 邵阳县| 当阳市| 乌鲁木齐市| 安庆市| 壶关县| 任丘市| 蓬莱市| 黔东| 巴东县| 临猗县| 枝江市| 河间市| 中牟县| 绿春县| 鹤岗市| 德清县| 潞西市| 边坝县| 隆安县| 枣阳市| 海淀区| 江陵县| 合川市| 广州市| 鹤峰县| 建宁县|