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

BeetleX快速构建多平台的TCP和SSL TCP应用的更多相关文章

  1. TCP和SSL TCP应用

    TCP和SSL TCP应用 对于普通开发者而言编写TCP应用通讯是一件相对复杂的工作,毕竟需要一系列的bytes操作:如果再针对SSL的安全性处理相信会把很多普通开发者拒之门外.为了简化这一问题Bee ...

  2. 微服务平台(Micro Service Platform : MSP)旨在提供一个集开发、测试、运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效。

    微服务平台(Micro Service Platform : MSP)旨在提供一个集开发.测试.运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效. MSP采用业界 ...

  3. (转)10 分钟内快速构建能够承载海量数据的 nginx 日志分析与报警平台

    10 分钟内快速构建能够承载海量数据的 nginx 日志分析与报警平台 原文:https://blog.qiniu.com/archives/8713

  4. SpringBoot 快速构建微服务体系 知识点总结

    可以通过http://start.spring.io/构建一个SpringBoot的脚手架项目 一.微服务 1.SpringBoot是一个可使用Java构建微服务的微框架. 2.微服务就是要倡导大家尽 ...

  5. 9. 利用Docker快速构建MGR | 深入浅出MGR

    目录 1.安装Docker 2.拉取GreatSQL镜像,并创建容器 2.1 拉取镜像 2.2 创建新容器 2.3 容器管理 3.构建MGR集群 3.1 创建专用子网 3.2 创建3个新容器 3.3 ...

  6. 快速构建Windows 8风格应用14-ShareContract概述及原理

    原文:快速构建Windows 8风格应用14-ShareContract概述及原理 本篇博文主要介绍Share Contract概述.Share Contract实现原理.实现Share Contra ...

  7. 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序

    http://blog.csdn.net/wingfourever/article/details/7726724 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX ...

  8. 使用PowerApps快速构建基于主题的轻业务应用 —— 进阶篇

    作者:陈希章 发表于 2017年12月14日 在上一篇 使用PowerApps快速构建基于主题的轻业务应用 -- 入门篇 中,我用了三个实际的例子演示了如何快速开始使用PowerApps构建轻业务应用 ...

  9. [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境

    快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...

随机推荐

  1. JSF-受管Bean与EL表达式

    受管Bean与EL表达式 1)编写Bean:①有一个不带形参的构造方法 ②getXxx.setXxx ③一般要实现io.Serializable接口 2)声明受管Bean:①bean名称为外界访问其属 ...

  2. 利用Python进行数据分析

    最近在阅读<利用Python进行数据分析>,本篇博文作为读书笔记 ,记录一下阅读书签和实践心得. 准备工作 python环境配置好了,可以参见我之前的博文<基于Python的数据分析 ...

  3. asp.net路径问题

    -------------初级篇---------------------------------------- 在一般的href中路径的引用问题   ./index.aspx与index.aspx都 ...

  4. python爬虫入门(三)XPATH和BeautifulSoup4

    XML和XPATH 用正则处理HTML文档很麻烦,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素. XML 指可扩展标记语言(EXtensible Ma ...

  5. spring和hibernate整合之---java.lang.ClassNotFoundException: javax.el.ELManager 大坑

    今天整合spring和hibernate, 本着使用最高版本的原则, 使用了hibernate-validator  6.0.1.Final, tomcat是7.0.56, 启动时出现如下错误. 经过 ...

  6. PAT1096:Consecutive Factors

    1096. Consecutive Factors (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...

  7. Elasticsearch结构化搜索_在案例中实战使用term filter来搜索数据

    1.根据用户ID.是否隐藏.帖子ID.发帖日期来搜索帖子 (1)插入一些测试帖子数据 POST /forum/article/_bulk { "index": { "_i ...

  8. Intent的跳转和传值

    看了Intent的使用方法,感觉还是要做一些笔记的,首先对于Intent的跳转Activity这个功能的实现就有两种方法,也可以说有三种: 1.                  2.

  9. pdf在线加载·

    https://yq.aliyun.com/articles/40197  在线例子是这个

  10. 获取input Date日期 时间,并得到前一天的Date值

    var endTime = time.substring(0, 10); var temp1 = new Date(endTime.replace(/-/g,"/")); temp ...