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

首頁 > 編程 > C# > 正文

C# Socket實現(xiàn)簡單控制臺案例

2019-10-29 21:11:01
字體:
供稿:網(wǎng)友

一、服務器端

1. 實例化并設置socket實例對象

    a.創(chuàng)建ip地址和端口

    b.綁定監(jiān)聽地址

    c.設置一下允許同時訪問數(shù)

2. 監(jiān)聽連接

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

    b.利用循環(huán)等待連接并返回一個負責通信的socket實例

    c.返回的socket實例中可以獲取到所連接客服的IP地址

3. 接收客服的發(fā)送過來的消息

    a.在監(jiān)聽方法中啟動一個新的線程執(zhí)行

    b.利用循環(huán)獲取發(fā)送過來的消息,調(diào)用獲取消息的方法需要傳遞一個字節(jié)變量參數(shù),作為容器。方法返回值為int,表示獲取到的有效字節(jié)數(shù)

    c.如果有效字節(jié)數(shù)為0則跳出循環(huán)

    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綁定監(jiān)聽地址   serverSocket.Bind(point);   Console.WriteLine("Listen Success");   //設置同時連接個數(shù)   serverSocket.Listen(10);   //利用線程后臺執(zhí)行監(jiān)聽,否則程序會假死   Thread thread = new Thread(Listen);   thread.IsBackground = true;   thread.Start(serverSocket);   Console.Read();  }  /// <summary>  /// 監(jiān)聽連接  /// </summary>  /// <param name="o"></param>  static void Listen(object o)  {   var serverSocket = o as Socket;   while (true)   {    //等待連接并且創(chuàng)建一個負責通訊的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)   {    //獲取發(fā)送過來的消息容器    byte[] buffer = new byte[1024 * 1024 * 2];    var effective = send.Receive(buffer);    //有效字節(jié)為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.創(chuàng)建ip地址和端口(服務器的IP和端口)

    b.與服務器端建立鏈接

2. 接收服務器發(fā)送的消息

    a.啟動一個新的線程執(zhí)行

    b.利用循環(huán)獲取發(fā)送過來的消息,調(diào)用獲取消息的方法需要傳遞一個字節(jié)變量參數(shù),作為容器。方法返回值為int,表示獲取到的有效字節(jié)數(shù)

    c.如果有效字節(jié)數(shù)為0則跳出循環(huán)

3. 給服務器發(fā)送消息

    a. 調(diào)用socket對象的send()方法直接發(fā)送

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!");   //創(chuàng)建實例   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);      //不停的接收服務器端發(fā)送的消息   Thread thread = new Thread(Recive);   thread.IsBackground = true;   thread.Start(socketClient);   //不停的給服務器發(fā)送數(shù)據(jù)   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)   {    //獲取發(fā)送過來的消息    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);   }  } }}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關教程知識閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 行唐县| 台州市| 浑源县| 南通市| 枝江市| 科尔| 灌南县| 鹤岗市| 裕民县| 乐安县| 聊城市| 历史| 牙克石市| 喜德县| 景泰县| 三亚市| 永登县| 固始县| 文水县| 沧州市| 广丰县| 唐山市| 仙桃市| 凤冈县| 绥中县| 普宁市| 丹寨县| 景宁| 乐陵市| 永靖县| 铜山县| 曲阜市| 商洛市| 巫山县| 平果县| 南陵县| 彭州市| 东山县| 阿鲁科尔沁旗| 巫溪县| 五大连池市|