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


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

引用組件

使用組件可以通過Nuget引用組件,最新版本是1.2.6.8

 

構建TCP服務

組件構建通訊應用非常簡單,在引用組件后簡單實現IServerHandler接口即可,以下是簡單構建的服務代碼:

    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實現體系,所以在客戶端上也是使用同樣的流模式操作即可.

            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通訊。

    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的啟動狀態

支持平台

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

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


免責聲明!

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



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