SuperSocket實例


下載地址:https://files.cnblogs.com/files/xixixing/ConsoleApp.zip

創建控制台應用程序:ConsoleApp

MySession.cs

using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;
using System;

namespace ConsoleApp
{
    /// <summary>
    /// 用來發送和接收客戶端信息,一個客戶端相當於一個session(會話)。
    /// 自定義連接類MySession,繼承AppSession,並傳入到AppSession
    /// </summary>
    public class MySession : AppSession<MySession>
    {
        /// <summary>
        /// 新連接
        /// </summary>
        //protected override void OnSessionStarted()
        //{
        //    this.Send("\r\nHello User");
        //}

        /// <summary>
        /// 未知的請求
        /// </summary>
        /// <param name="requestInfo"></param>
        protected override void HandleUnknownRequest(StringRequestInfo requestInfo)
        {
            //this.Send("\r\nUnknown Request");
        }

        /// <summary>
        /// 捕捉異常並輸出
        /// </summary>
        /// <param name="e"></param>
        protected override void HandleException(Exception e)
        {
            //this.Send("\r\nException: {0}", e.Message);
        }

        /// <summary>
        /// 連接關閉
        /// </summary>
        /// <param name="reason"></param>
        protected override void OnSessionClosed(CloseReason reason)
        {
            base.OnSessionClosed(reason);
        }
    }
}

MyServer.cs

using SuperSocket.SocketBase;
using System;

namespace ConsoleApp
{
    /// <summary>
    /// 自定義服務器類MyServer,繼承AppServer,並傳入自定義連接類MySession
    /// </summary>
    public class MyServer : AppServer<MySession>
    {
        protected override void OnStarted()
        {
            base.OnStarted();
            //Console.WriteLine("服務器已啟動");
        }

        /// <summary>
        /// 輸出新連接信息
        /// </summary>
        /// <param name="session"></param>
        protected override void OnNewSessionConnected(MySession session)
        {
            base.OnNewSessionConnected(session);
            //輸出客戶端IP地址
            Console.Write("\r\n" + session.LocalEndPoint.Address.ToString() + ":連接");
        }

        /// <summary>
        /// 輸出斷開連接信息
        /// </summary>
        /// <param name="session"></param>
        /// <param name="reason"></param>
        protected override void OnSessionClosed(MySession session, CloseReason reason)
        {
            base.OnSessionClosed(session, reason);
            //輸出客戶端IP地址
            Console.Write("\r\n" + session.LocalEndPoint.Address.ToString() + ":斷開連接");
        }

        protected override void OnStopped()
        {
            base.OnStopped();
            Console.WriteLine("服務器已停止");
        }
    }
}

Program.cs

using System;
using SuperSocket.SocketBase;
using SuperSocket.SocketEngine;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var bootstrap = BootstrapFactory.CreateBootstrap();

            if (!bootstrap.Initialize()) //啟動SuperSocket
            {
                Console.WriteLine("初始化失敗!");
                Console.ReadKey();
                return;
            }
            var result = bootstrap.Start();

            Console.WriteLine("服務正在啟動: {0}!", result);

            if (result == StartResult.Failed)
            {
                Console.WriteLine("服務啟動失敗!");
                Console.ReadKey();
                return;
            }
            Console.WriteLine("服務啟動成功,請按'E'停止服務!");

            while (Console.ReadKey().KeyChar != 'E')
            {
                Console.WriteLine();
                continue;
            }

            //停止服務
            bootstrap.Stop();
            Console.WriteLine("服務已停止!");
            Console.ReadKey();
        }
    }
}

MyKey.cs,寫了兩個Key:HELLO、READY,響應的結果都是1234

using SuperSocket.SocketBase.Command;
using SuperSocket.SocketBase.Protocol;

namespace ConsoleApp
{
    public class HELLO : CommandBase<MySession, StringRequestInfo>
    {
        /// <summary>
        /// 自定義執行命令方法,注意傳入的變量session類型為MySession
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        public override void ExecuteCommand(MySession session, StringRequestInfo requestInfo)
        {
            session.Send("1234");
        }
    }
    public class READY : CommandBase<MySession, StringRequestInfo>
    {
        public override void ExecuteCommand(MySession session, StringRequestInfo requestInfo)
        {
            session.Send("1234");
        }
    }
}

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <!--log 日志記錄-->
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
    <!--SocketEngine-->
    <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine"/>
  </configSections>
  <!--服務信息描述,在window服務模式下的名稱標識-->
  <appSettings>
    <add key="ServiceName" value="SupperSocketService"/>
    <add key="ServiceDescription" value="黃昏前黎明后的Socket程序"/>
  </appSettings>
  <!--SuperSocket服務配置信息 serverType是項目的服務,如我自定義的MyServer-->
  <!--name: 實例名稱
      textEncoding 編碼方式"gb2312","utf-8" 默認是acii
      serverType: 實例運行的AppServer類型。逗號左邊的是你自定義的server在項目中的位置,逗號右邊是項目名
      ip: 服務器ip
      port: 偵聽端口-->
  <superSocket>
    <servers>
      <server name="ConsoleApp" textEncoding="gb2312" serverType="ConsoleApp.MyServer,ConsoleApp" ip="Any" port="2000">
        <!--ip="192.168.0.40"-->
      </server>
    </servers>
  </superSocket>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM