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对象

相关文章
相关标签/搜索