TCP和SSL TCP应用
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
专注dotnet core 服务应用技术研发

- BeetleX高性能通讯组件,支持SSL
- FastHttpApi简便高性能webapi组件,支持websocket、ssl性能高于asp.net core webapi 200%
- 高性能Webapi网关组件,支持自定义插件
什么时候使用BeetleX.FastHttpApi
- 当你需要一个高性能的webapi服务的时候,因为它具有asp.net core mvc的简便使用特性的同时提升了200%或更高的性能。
- 当你希望接口同时支持http和websocket,组件支持一个逻辑控制器同时提供http和websocket两种服务,即一份代码即可服务http和websocket请求
- 当你需要一个嵌入的HTTP服务应用,组件支持netstandard2.0,可以灵活地在winform或wpf中集成一个可靠的HTTP服务。
TCP和SSL TCP应用的更多相关文章
- BeetleX快速构建多平台的TCP和SSL TCP应用
对于普通开发者而言编写TCP应用通讯是一件相对复杂的工作,毕竟需要一系列的bytes操作:如果再针对SSL的安全性处理相信会把很多普通开发者拒之门外.为了简化这一问题BeetleX引入了Stream操 ...
- TCP和SSL
查看TCP和SSL的握手时间: curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}\n&qu ...
- 开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等
开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等 C++开发网络通信程序时用asio是个不错的选择 ...
- 【Linux】【Web】【HTTP】HTTP,TCP,SSL通讯过程
1. HTTP 一次完整的http请求处理过程: (1) 建立或处理连接:接收请求或拒绝请求(三次握手): (2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程: (3) 处 ...
- OGG-01232 Receive TCP params error: TCP/IP error 104 (Connection reset by peer), endpoint:
源端: 2015-02-05 17:45:49 INFO OGG-01815 Virtual Memory Facilities for: COM anon alloc: mmap(MAP_ANON) ...
- TCP/IP之TCP的建立与终止
TCP协议简介 tcp/ip协议族中传输层最重要的两种协议是UDP和TCP协议,上一篇文章用很短的篇幅介绍完了UDP协议相关的内容,但相对于UDP而言的TCP协议,是种更复杂,应用更广的协议.在接下来 ...
- TCP/IP 笔记 - TCP保活机制
TCP协议中不存在轮询机制,这意味着加入启动一个客户端进程,与服务器建立连接后,然后离开几小时.几天.甚至几个月,连接依然会保持着.理论上,中间路由器可以崩溃和重启,数据线可以断开再连接,只要连接两端 ...
- TCP/IP 笔记 - TCP拥塞控制
拥塞控制是TCP通信的每一方需要执行的一系列行为,这些行为有特定算法规定,用于防止网络因为大规模的通信负载而瘫痪.其基本方法是当有理由认为网络即将进入拥塞状态(或已由于拥塞而出现路由丢包情况)时减缓T ...
- TCP/IP 笔记 - TCP数据流和窗口管理
TCP流量控制机制通过动态调整窗口大小来控制发送端的操作,确保路由器/接收端消息不会溢出. 交互式TCP连接 交互式TCP连接指该连接需要在客户端和服务器之间传输用户输入信息,如按键操作.短消息.操作 ...
随机推荐
- java mybaits 调用存储过程
@Override public BaseResultMessage saveOrderConfirm(String billNo) { BaseResultMessage rm = Utils.re ...
- EntityManager的基本方法
1.Persistence 主要用来获取EntityManagerFactory的实例; 通过静态方法:createEntityManagerFactory 来实现: 该方法有两个重载版本: ...
- AJAX 请求完成时执行函数。Ajax 事件。
ajaxComplete(callback) 概述 AJAX 请求完成时执行函数.Ajax 事件. XMLHttpRequest 对象和设置作为参数传递给回调函数.大理石直角尺 参数 callback ...
- C语言 - sizeof和strlen的区别
sizeof和strlen的区别: 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型. 该类型保证能容纳实现所建立的最大对象的字节大小. 2.s ...
- TNS-12560: TNS: 协议适配器错误
TNS-12560: TNS: 协议适配器错误 Microsoft Windows [版本 5.2.3790] (C) 版权所有 1985-2003 Microsoft Corp. C:\Docu ...
- BZOJ 4814 Luogu P3699 [CQOI2017]小Q的草稿 (计算几何、扫描线、set)
题目链接 (BZOJ) http://lydsy.com/JudgeOnline/problem.php?id=4814 (Luogu) https://www.luogu.org/problem/P ...
- [CSP-S模拟测试]:答题(meet in the middle)
题目传送门(内部题142) 输入格式 输入文件的第一行为两个数$n,P$. 接下来一行$n$为个正整数,表示每道题的分数. 输出格式 输出一行一个正整数,为至少需要获得的分数. 样例 样例输入: 2 ...
- R语言:读入txt文件中文文本出现乱码解决方案
下载安装 readr 因为使用内置函数 read.table() 读入应该是格式不符合要求会报错 library(readr) help(package="readr") 可以使用 ...
- Telnet/SSH 客户端
一.WinSCP linux 与 windows 间传递文件.可以与 putty 配合使用. 官网提供便携版下载:https://winscp.net/eng/downloads.php 支持中文,语 ...
- 创建DevExtreme应用程序
如果你从头开始一个项目,那就使用DevExtreme Angular 模板.生成的项目带导航菜单以及在响应布局中的几个对应的示例视图. 你可以使用 DevExtreme CLI 生成应用程序: npx ...