SuperSocket入門(一)-Telnet伺服器和客戶端請求處理

来源:http://www.cnblogs.com/fly-bird/archive/2017/01/18/6298254.html
-Advertisement-
Play Games

本文的控制台項目是根據SuperSocket官方Telnet示例代碼進行調試的,官方示例代碼:Telnet示例。 開始我的第一個Telnet控制台項目之旅: 創建控制台項目:打開vs程式,文件=》新建=》項目 一、下載SuperSocket的動態庫,主要有兩種方式獲取SuperSocket的動態庫。 ...


       本文的控制台項目是根據SuperSocket官方Telnet示例代碼進行調試的,官方示例代碼:Telnet示例

       開始我的第一個Telnet控制台項目之旅:

       創建控制台項目:打開vs程式,文件=》新建=》項目

          

      一、下載SuperSocket的動態庫,主要有兩種方式獲取SuperSocket的動態庫。

      1、添加SuperSocket的dll文件(SuperSocket.Common.dll, SuperSocket.SocketBase.dll, SuperSocket.SocketEngine.dll)到此項目的引用,直接再官方網站上下載SuperSocket組件,引入需要dll文件即可:

           

 

     2、通過 nuget來獲取,本人也比較喜歡這種方式,可以更新組件版本。(註意:我這裡使用的是vs2015可以直接打開nuget,如果使用vs舊版本的同學需要下載nuget組件)

         

         點擊瀏覽,輸入supersocket,勾選組件安裝即可

         

        添加完成組件後需要註意將config文件進行編譯成內容,log4net需要使用config文件。

       

 

        查看引入後的項目整體目錄,框紅線的為引入supersocket組件和文件

       

   二、使用官方提供的啟動伺服器的代碼進行測試服務啟動和停止

     

 1 /// <summary>
 2 /// SuperSocket服務啟動或停止
 3 /// </summary>
 4 /// <param name="args"></param>
 5 static void Main(string[] args)
 6 {
 7 Console.WriteLine("請按任何鍵進行啟動SuperSocket服務!");
 8 
 9 Console.ReadKey();
10 Console.WriteLine();
11 
12 var appServer = new AppServer();
13 
14 //啟動應用服務埠
15 if (!appServer.Setup(2017)) //啟動時監聽埠2017
16 {
17 Console.WriteLine("服務埠啟動失敗!");
18 Console.ReadKey();
19 return;
20 }
21 
22 Console.WriteLine();
23 
24 //嘗試啟動應用服務
25 if (!appServer.Start())
26 {
27 Console.WriteLine("服務啟動失敗!");
28 Console.ReadKey();
29 return;
30 }
31 
32 Console.WriteLine("服務啟動成功,請按'E'停止服務!");
33 
34 while (Console.ReadKey().KeyChar != 'E')
35 {
36 Console.WriteLine();
37 continue;
38 }
39 
40 //停止服務
41 appServer.Stop();
42 
43 Console.WriteLine("服務已停止!");
44 Console.ReadKey();
45 }
telnet服務啟動和關閉

 

  運行項目:

     

    運行成功後可以查看Debug文件夾下的logs日誌跟蹤文件,從日誌裡面,我們可以看到伺服器已經能啟動成功,但是這還沒有什麼用,因為我們並沒有處理客戶的鏈接進來,處理客戶的發送過來的信息。根據官方文檔,我們繼續拷貝代碼來完善我們的程式。

     三、註冊客戶端鏈接和處理客戶端發送信息

       1、處理客戶端連接,註冊回話新建事件處理方法

      appServer.NewSessionConnected += new SessionHandler(appServer_NewSessionConnected);

       2、在事件處理代碼中發送歡迎信息給客戶端

      static void appServer_NewSessionConnected(AppSession session)

      {

          session.Send("Welcome to SuperSocket Telnet Server!");

      }

     3、使用Telnet客戶端進行測試(註意:使用telnet必須先安裝telnet服務)

         

         安裝完成後,先運行telnet伺服器

         

 

         進行運行win+r命令視窗cmd ,輸入telnet localhost 2017。(2017是開始程式中偵聽的埠)

         

         回車,顯示歡迎語說明客戶端和伺服器端進行鏈接成功。

        

        4、處理客戶端發送的信息,我繼續拷貝代碼

 1  /// <summary>
 2         ///客戶端請求處理
 3         /// </summary>
 4         /// <param name="session">會話</param>
 5         /// <param name="requestInfo">請求信息</param>
 6 
 7         static void appServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
 8         {
 9             switch (requestInfo.Key.ToUpper())
10             {
11                 case ("ECHO"):
12                     session.Send(requestInfo.Body);
13                     break;
14 
15                 case ("ADD"):
16                     session.Send(requestInfo.Parameters.Select(p => Convert.ToInt32(p)).Sum().ToString());
17                     break;
18 
19                 case ("MULT"):
20 
21                     var result = 1;
22 
23                     foreach (var factor in requestInfo.Parameters.Select(p => Convert.ToInt32(p)))
24                     {
25                         result *= factor;
26                     }
27 
28                     session.Send(result.ToString());
29                     break;
30             }
31         }
客戶端發送請求處理

         5、註冊請求事件

1 appServer.NewRequestReceived += new RequestHandler<AppSession, StringRequestInfo>(appServer_NewRequestReceived);
註冊客戶端請求事件

        運行效果:

      除了使用telnet客戶端,網上還有一個tcp/udp的測試工具可以鏈接伺服器

     

         今天的supersocket框架的入門學習就到這裡了,本人水平和文筆有限,有錯誤的地方歡迎大家指正!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.結構:結構除了可以含有屬性和欄位,還可以包方法和構造器,但不能包含黠認(無參數}的構造器。有的時候(比如在實例化一個數組的時候)不會調用值類型的構造器,因為所有數組記憶體都轉為用零來初始化,為了避免因為預設構造器只是偶爾調用而造成不一致,C#完全禁止了用戶顯式定義預設構造器,因為編譯器會將聲明時的 ...
  • 接 上一篇 內容, 這裡先看一下錯誤處理過濾器. 在看此部分之前, 先看看MVC已經提供的功能吧. 一. MVC 自帶功能 1. 配置方法 這裡的mode預設是 Off , 就是會在頁面中直接顯示詳細的錯誤信息. 如果是 On, 則不會顯示詳細的錯誤信息, 顯示是這樣的: 在沒有配置具體 statu ...
  • 最近遇到的一個項目中用到了標題所說的方法,用Spring.Net將業務類封閉成WebService供其它地方調用使用,感覺還是蠻新鮮的,於是在園子中搜了一篇園友寫的文章(這裡)自己也嘗試著搭了一個環境,最後是順利跑了起來,但是中間遇到了幾個問題,這裡記錄一下。 具體的搭建方法不再贅述,上面的文章寫的 ...
  • ...
  • 前言 EF通過linq和各種擴展方法,再加上實體模型,編寫資料庫的訪問代碼確實是優美、舒服,但是生成的sql不盡如意、性能低下,尤其是複雜些的邏輯關係,最終大家還是會回歸自然,選擇能夠友好執行sql語句的ORM,認認真真的編寫sql;問題是:EF是否也能夠很友好的執行sql語句?EF提供直接執行sq ...
  • 背水一戰 Windows 10 之 控制項(導航類): Frame ...
  • 在ASP.NET MVC中,Ajax.BeginForm扮演著非同步提交的重要角色。其中就有五個重載方法,但是在實際應用中,你未必使用的得心應手,今天我們就從主要的參數來一探究竟。 一、actionName 用於指定請求地址的Action名稱。 二、controllerName 用於指定請求地址的Co ...
  • 任何一個和數據相關的系統里,數據持久化都是一個不容忽視的問題。 一直以來,Java 平臺出了很多 NB 的 ORM 框架,Hibernate、MyBatis等等。.NET 平臺上,ORM 框架這一塊一直沒有一個能吊到讓幾乎所有開發人員改掉以拼寫 SQL 語句訪問資料庫的習慣。 實際上,在 .NET ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...