最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Socket實現(xiàn)心跳的方法示例

 更新時間:2020年02月12日 11:42:13   作者:風(fēng)之_訴  
這篇文章主要介紹了C#使用Socket實現(xiàn)心跳的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Server端代碼:

class Program
{
  static SocketListener listener;
 
  public static void Main(string[] args)
  {
    //實例化Timer類,設(shè)置間隔時間為5000毫秒;
    System.Timers.Timer t = new System.Timers.Timer(5000);
    t.Elapsed += new System.Timers.ElapsedEventHandler(CheckListen);
    //到達(dá)時間的時候執(zhí)行事件; 
    t.AutoReset = true;
    t.Start();
 
    listener = new SocketListener();
    listener.ReceiveTextEvent += new SocketListener.ReceiveTextHandler(ShowText);
    listener.StartListen();
 
    Console.ReadKey();
  }
 
  private static void ShowText(string text)
  {
    Console.WriteLine(text);
  }
 
  private static void CheckListen(object sender, System.Timers.ElapsedEventArgs e)
  {
    if (listener != null && listener.Connection != null)
    {
      Console.WriteLine("連接數(shù):" + listener.Connection.Count.ToString());
    }
  }
}
 
public class Connection
{
  Socket _connection;
 
  public Connection(Socket socket)
  {
    _connection = socket;
  }
 
  public void WaitForSendData(object connection)
  {
    try
    {
      while (true)
      {
        byte[] bytes = new byte[1024];
        string data = "";
 
        //等待接收消息
        int bytesRec = this._connection.Receive(bytes);
 
        if (bytesRec == 0)
        {
          // ReceiveText("客戶端[" + _connection.RemoteEndPoint.ToString() + "]連接關(guān)閉...");
          break;
        }
 
        data += Encoding.UTF8.GetString(bytes, 0, bytesRec);
        ReceiveText("收到消息:" + data);
 
        string sendStr = "服務(wù)端已經(jīng)收到信息!";
        byte[] bs = Encoding.UTF8.GetBytes(sendStr);
        _connection.Send(bs, bs.Length, 0);
      }
    }
    catch (Exception)
    {
      ReceiveText("客戶端[" + _connection.RemoteEndPoint.ToString() + "]連接已斷開...");
      Hashtable hConnection = connection as Hashtable;
      if (hConnection.Contains(_connection.RemoteEndPoint.ToString()))
      {
        hConnection.Remove(_connection.RemoteEndPoint.ToString());
      }
    }
  }
 
  public delegate void ReceiveTextHandler(string text);
  public event ReceiveTextHandler ReceiveTextEvent;
  private void ReceiveText(string text)
  {
    if (ReceiveTextEvent != null)
    {
      ReceiveTextEvent(text);
    }
  }
}
 
public class SocketListener
{
  public Hashtable Connection = new Hashtable();
 
  public void StartListen()
  {
  Agine:
    try
    {
      //端口號、IP地址
      //int port = 8889;
      //string host = "127.0.0.1";
      //IPAddress ip = IPAddress.Parse(host);
      //IPEndPoint ipe = new IPEndPoint(ip, port);
      string ip = string.Empty;
      System.Net.IPHostEntry IpEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
      for (int i = 0; i != IpEntry.AddressList.Length; i++)
      {
        if (!IpEntry.AddressList[i].IsIPv6LinkLocal)
        {
          ip = IpEntry.AddressList[i].ToString();
        }
      }
      IPEndPoint ipend = new IPEndPoint(IPAddress.Parse(ip), 6000);
      //創(chuàng)建一個Socket類
      Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      s.Bind(ipend);//綁定2000端口
      s.Listen(0);//開始監(jiān)聽
 
      ReceiveText("啟動Socket監(jiān)聽...");
 
      while (true)
      {
        Socket connectionSocket = s.Accept();//為新建連接創(chuàng)建新的Socket
 
        ReceiveText("客戶端[" + connectionSocket.RemoteEndPoint.ToString() + "]連接已建立...");
 
        Connection gpsCn = new Connection(connectionSocket);
        gpsCn.ReceiveTextEvent += new Connection.ReceiveTextHandler(ReceiveText);
 
        Connection.Add(connectionSocket.RemoteEndPoint.ToString(), gpsCn);
 
        //在新線程中啟動新的socket連接,每個socket等待,并保持連接
        Thread thread = new Thread(gpsCn.WaitForSendData);
        thread.Name = connectionSocket.RemoteEndPoint.ToString();
        thread.Start(Connection);
      }
    }
    catch (ArgumentNullException ex1)
    {
      ReceiveText("ArgumentNullException:" + ex1);
    }
    catch (SocketException ex2)
    {
      ReceiveText("SocketException:" + ex2);
    }
 
    goto Agine;
  }
 
  public delegate void ReceiveTextHandler(string text);
  public event ReceiveTextHandler ReceiveTextEvent;
  private void ReceiveText(string text)
  {
    if (ReceiveTextEvent != null)
    {
      ReceiveTextEvent(text);
    }
  }
}

Client端代碼:

class Program
{
  static void Main(string[] args)
  {
    Socket c;
 
    //int port = 4029;
    // 避免使用127.0.0.1,我在本機測試是不能運行的
    //string host = "127.0.0.1";
    //IPAddress ip = IPAddress.Parse(host);
    //IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口轉(zhuǎn)化為IPEndPoint實例
    string ip = string.Empty;
    System.Net.IPHostEntry IpEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
    for (int i = 0; i != IpEntry.AddressList.Length; i++)
    {
      if (!IpEntry.AddressList[i].IsIPv6LinkLocal)
      {
        ip = IpEntry.AddressList[i].ToString();
      }
    }
    IPEndPoint ipend = new IPEndPoint(IPAddress.Parse(ip), 6000);
 
    c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//創(chuàng)建一個Socket
 
    try
    {
      c.Connect(ipend);//連接到服務(wù)器
 
      Console.WriteLine("連接到Socket服務(wù)端...");
 
      Console.WriteLine("發(fā)送消息到服務(wù)端...");
      string sendStr = "m s g";
      byte[] bs = Encoding.UTF8.GetBytes(sendStr);
      c.Send(bs, bs.Length, 0);
 
      string recvStr = "";
      byte[] recvBytes = new byte[1024];
      int bytes;
      bytes = c.Receive(recvBytes, recvBytes.Length, 0);//從服務(wù)器端接受返回信息
      recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
 
      Console.WriteLine("服務(wù)器返回信息:" + recvStr);
    }
    catch (ArgumentNullException ex1)
    {
      Console.WriteLine("ArgumentNullException:{0}", ex1);
    }
    catch (SocketException ex2)
    {
      Console.WriteLine("SocketException:{0}", ex2);
    }
 
    Console.ReadKey();
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#中的隊列Queue<T>與堆棧Stack<T>

    C#中的隊列Queue<T>與堆棧Stack<T>

    這篇文章介紹了C#中的隊列Queue<T>與堆棧Stack<T>,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C# 獲取程序集版本、文件版本

    C# 獲取程序集版本、文件版本

    C# 獲取程序集版本、文件版本的實現(xiàn)代碼。
    2009-09-09
  • C#檢測是否有u盤插入的方法

    C#檢測是否有u盤插入的方法

    這篇文章主要介紹了C#檢測是否有u盤插入的方法,涉及C#操作硬件的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#開發(fā)教程之FTP上傳下載功能詳解

    C#開發(fā)教程之FTP上傳下載功能詳解

    這篇文章主要為大家詳細(xì)介紹了C#開發(fā)教程之FTP上傳下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#使用DirectX.DirectSound播放語音

    C#使用DirectX.DirectSound播放語音

    這篇文章主要為大家詳細(xì)介紹了C#使用DirectX.DirectSound播放語音,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C# RSA分段加解密實現(xiàn)方法詳解

    C# RSA分段加解密實現(xiàn)方法詳解

    這篇文章主要介紹了C# RSA分段加解密實現(xiàn)方法,結(jié)合具體實例形式分析了C# RSA加密解密的原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • C#圖像透明度調(diào)整的方法

    C#圖像透明度調(diào)整的方法

    這篇文章主要介紹了C#圖像透明度調(diào)整的方法,涉及C#操作圖像透明度的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C# 反射與 Quartz 實現(xiàn)流程處理詳情

    C# 反射與 Quartz 實現(xiàn)流程處理詳情

    根據(jù)要實現(xiàn)流程處理,比如用戶可以定義一個定時任務(wù),每周一查看報表。任務(wù)是用Quartz可實現(xiàn),但用戶自己選擇報表就比較麻煩,這時因為系統(tǒng)的不同模塊的生成報表的函數(shù)不同,這時便可以傳入一個方法名和方法的輸入?yún)?shù),就可以調(diào)用該方法。下面小編我為大家介紹具體過程
    2021-09-09
  • 淺談C#多線程下的調(diào)優(yōu)

    淺談C#多線程下的調(diào)優(yōu)

    本文主要介紹了C#多線程下的調(diào)優(yōu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C#字符串與數(shù)值類型、字節(jié)數(shù)組的互相轉(zhuǎn)換實戰(zhàn)案例

    C#字符串與數(shù)值類型、字節(jié)數(shù)組的互相轉(zhuǎn)換實戰(zhàn)案例

    最近由于編程的需要,對C#的類型轉(zhuǎn)換做了一些研究,下面這篇文章主要給大家介紹了關(guān)于C#字符串與數(shù)值類型、字節(jié)數(shù)組的互相轉(zhuǎn)換的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評論

涡阳县| 巴里| 通江县| 淮阳县| 舒城县| 元阳县| 双城市| 泌阳县| 淳化县| 枝江市| 洛隆县| 平泉县| 永泰县| 开化县| 三门县| 卓资县| 久治县| 东丽区| 旺苍县| 普安县| 靖西县| 于都县| 农安县| 盐津县| 思茅市| 西丰县| 昌宁县| 固镇县| 米泉市| 舟山市| 新化县| 精河县| 北票市| 临沂市| 清丰县| 上林县| 安塞县| 新乐市| 金平| 太湖县| 永年县|