TCPおよびSSLのTCPアプリケーションは、TCPおよびSSL TCPを使います

TCPおよびSSL TCPアプリケーション

通信を書かれたTCPアプリケーションの平均的な開発者のための比較的複雑なタスクは、すべての後に、バイトの一連の動作を必要としている。私たちはSSLを扱う一般的な安全性のために多くの開発者がこれを簡単にするためにシャットアウトできるようになると考えています。問題は、BeetleX導入されたStream動作モードを提供し、PipiStream運用のオブジェクトは、開発者がTCPストリーム上の非常に簡単な操作することができます。ので、PipiStream​簡単な操作を提供しながら、基本的なsaea拡張フローモデル、それはまた、優れた性能を提供しています。ここで使用する方法ですBeetleXTCP SSLベースのアプリケーションの例やTCPビルドを。

基準成分

最新バージョンでは、コンポーネントがNugetコンポーネントによって参照することができますされて使用してください1.2.6.8

 

TCPサービスの構築

通信アプリケーションを構築するためのコンポーネントは、単純なインプリメンテーション後にコンポーネントを参照して、非常に簡単であるIServerHandlerとのインタフェース、次のサービスがコードをビルドするのが簡単です。

コードをコピー
    クラスプログラム:BeetleX.ServerHandlerBase 
    { 
        プライベート静的BeetleX.IServer mServer。

        静的な無効メイン(文字列[] args)
        { 
            mServer = SocketFactory.CreateTcpServer <プログラム>(); 
            mServer.Open(); 
            Console.WriteLineを(mServer.Status)。
            Console.Read(); 
        } 

        保護されたオーバーライド無効OnLogToConsole(IServerサーバ、ServerLogEventArgs E)
        { 

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

        パブリックオーバーライドボイドSessionReceive(IServerサーバ、SessionReceiveEventArgs E)
        {
            base.SessionReceive(サーバー、E); 
            VARストリーム= e.Stream.ToPipeStream()。
            IF(stream.TryReadLine(アウト列線))
            { 
                Console.WriteLineを(ライン)。
                stream.WriteLine($ "{DateTime.Now}")。
                e.Stream.Flush(); 
            } 
        } 
    }
コードをコピー

ServerHandlerBaseこれは、実装内部成分であるIServerHandler界面を、単に上書きするSessionReceiveデータを受信することができる処理するイベント。上記のコードは、情報のストリームから文字の行を読み取るための試みである読み取りが成功し、クライアントに現在時刻を出力する場合、コンテンツを表示します。

TCPクライアントの構築

クライアントとサーバーので、同じセットの使用Streamを実現するシステムを、そのクライアントが同じストリームモードの動作が可能使用しています。

コードをコピー
            VARクライアント= SocketFactory.CreateClient <Clients.TcpClient>( "localhost"を、9090); 
            client.Connect(); 
            VARストリーム= client.Stream.ToPipeStream()。
            一方、(TRUE)
            { 
                文字列値= Console.ReadLine(); 
                stream.WriteLine($ "{DateTime.Now} {値}")。
                client.Stream.Flush(); 
                client.Receive(); 
                IF(stream.TryReadLine(アウト列線))
                { 
                    Console.WriteLineを(ライン)。
                } 
            }
コードをコピー

業績

 

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


专注dotnet core 服务应用技术研发

什么时候使用BeetleX.FastHttpApi

  • 当你需要一个高性能的webapi服务的时候,因为它具有asp.net core mvc的简便使用特性的同时提升了200%或更高的性能。
  • 当你希望接口同时支持http和websocket,组件支持一个逻辑控制器同时提供http和websocket两种服务,即一份代码即可服务http和websocket请求
  • 当你需要一个嵌入的HTTP服务应用,组件支持netstandard2.0,可以灵活地在winform或wpf中集成一个可靠的HTTP服务。

对于普通开发者而言编写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

おすすめ

転載: www.cnblogs.com/Leo_wl/p/10964449.html