BeetleX快速構建多平臺的TCP和SSL TCP應用

對於普通開發者而言編寫TCP應用通信是一件相對複雜的工做,畢竟須要一系列的bytes操做;若是再針對SSL的安全性處理相信會把不少普通開發者拒之門外.爲了簡化這一問題BeetleX引入了Stream操做模式並提供PipiStream操做對象讓開發者在TCP流操做上變得很是簡便;因爲PipiStream​是基本saea擴展的流操做模型,所以在提供簡便操做的同時還能提供出色的性能。如下介紹如何使用BeetleX構建TCP和基於SSL的TCP應用示例。安全

引用組件

使用組件能夠經過Nuget引用組件,最新版本是1.2.6.8tcp

 

構建TCP服務

組件構建通信應用很是簡單,在引用組件後簡單實現IServerHandler接口便可,如下是簡單構建的服務代碼:ide

    class Program : BeetleX.ServerHandlerBase
    {
        private static BeetleX.IServer mServer;

        static void Main(string[] args)
        {
            mServer = SocketFactory.CreateTcpServer<Program>();
            mServer.Open();
            Console.WriteLine(mServer.Status);
            Console.Read();
        }

        protected override void OnLogToConsole(IServer server, ServerLogEventArgs e)
        {

            Console.WriteLine($"{DateTime.Now}\t{e.Type}\t{e.Session?.RemoteEndPoint} {e.Message}");
        }

        public override void SessionReceive(IServer server, SessionReceiveEventArgs e)
        {
            base.SessionReceive(server, e);
            var stream = e.Stream.ToPipeStream();
            if (stream.TryReadLine(out string line))
            {
                Console.WriteLine(line);
                stream.WriteLine($"{DateTime.Now}");
                e.Stream.Flush();
            }
        }
    }

ServerHandlerBase是組件內部實現IServerHandler接口,只須要簡單重寫SessionReceive事件來處理接收的數據可。以上代碼是嘗試從流中讀取一行字符信息,若是讀成功後顯示內容並把當前時間輸出給客戶端。性能

構建TCP客戶端

因爲客戶端和服務端使用同一套Stream實現體系,因此在客戶端上也是使用一樣的流模式操做便可.spa

            var client = SocketFactory.CreateClient<Clients.TcpClient>("localhost", 9090);
            client.Connect();
            var stream = client.Stream.ToPipeStream();
            while (true)
            {
                string value = Console.ReadLine();
                stream.WriteLine($"{DateTime.Now} {value}");
                client.Stream.Flush();
                client.Receive();
                if (stream.TryReadLine(out string line))
                {
                    Console.WriteLine(line);
                }
            }

運行效果

 

SSL服務端

不少時候應用須要一個可靠安全的通信機制,組件默認提供SSL的支持;只須要簡單地配置一下SSL信息便可實現安全的SSL通信。3d

    class Program : BeetleX.ServerHandlerBase
    {
        private static BeetleX.IServer mServer;

        static void Main(string[] args)
        {
            mServer = SocketFactory.CreateTcpServer<Program>();
            mServer.Options.DefaultListen.SSL = true;
            mServer.Options.DefaultListen.CertificateFile = "c:\\ikende.com.pfx";
            mServer.Options.DefaultListen.CertificatePassword = "******";
            mServer.Open();
            Console.WriteLine(mServer.Status);
            Console.Read();
        }

        protected override void OnLogToConsole(IServer server, ServerLogEventArgs e)
        {

            Console.WriteLine($"{DateTime.Now}\t{e.Type}\t{e.Session?.RemoteEndPoint} {e.Message}");
        }

        public override void SessionReceive(IServer server, SessionReceiveEventArgs e)
        {
            base.SessionReceive(server, e);
            var stream = e.Stream.ToPipeStream();
            if (stream.TryReadLine(out string line))
            {
                Console.WriteLine(line);
                stream.WriteLine($"{DateTime.Now}");
                e.Stream.Flush();
            }
        }
    }

SSL客戶端

    class Program
    {
        static void Main(string[] args)
        {
            var client = SocketFactory.CreateSslClient<Clients.TcpClient>("localhost", 9090, "ikende.com");
            client.Connect();
            var stream = client.Stream.ToPipeStream();
            while (true)
            {
                string value = Console.ReadLine();
                stream.WriteLine($"{DateTime.Now} {value}");
                client.Stream.Flush();
                client.Receive();
                if (stream.TryReadLine(out string line))
                {
                    Console.WriteLine(line);
                }
            }
        }
    }

在建立客戶端的SSL裏須要指定證書對應的機構名稱,用於進行SSL驗證。日誌

運行效果

組件在開啓SSL服務的日誌輸出打印出詳細的證書信息,用於方便查看SSL的啓動狀態code

支持平臺

組件支持2.1或更高版本的dorecore 和Standard2.0server

https://ikende.com/Files/BeetleX.Samples.Echo.zip對象

相關文章
相關標籤/搜索