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连接指该连接需要在客户端和服务器之间传输用户输入信息,如按键操作.短消息.操作 ...
随机推荐
- BZOJ 2243: [SDOI2011]染色 (树剖+线段树)
树链剖分后两个区间合并的时候就判一下相交颜色是否相同来算颜色段数就行了. CODE #include <vector> #include <queue> #include &l ...
- jcc
常用的jcc指令表
- Mysql教程-自动备份数据库
批处理命令: set"Ymd=%date:~,4%%date:~5,2%%date:~8,2%" set"hMs=%time:~,2%%time:~3,2%%tim ...
- 前端Web浏览器基于Flash如何实时播放监控视频画面(三)之使用ffmpeg‘推流’
本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 下载ffmpeg 开源免费的推流软件有很多,这里以 ffmpeg 为例.ffm ...
- 【集训队作业2018】小Z的礼物
小水题.题意就是不断随机放一个 \(1 \times 2\) 骨牌,然后取走里面的东西.求期望多少次取走所有的东西.然后有一维很小. 首先显然 minmax 容斥,将最后取走转化为钦定一些物品,求第一 ...
- CF1228E Another Filling the Grid
题目链接 问题分析 比较显见的容斥,新颖之处在于需要把横竖一起考虑-- 可以枚举没有\(1\)的行数和列数,答案就是 \[ \sum\limits_{i=0}^n\sum\limits_{j=0}^m ...
- easyui编辑editor
$.extend($.fn.datagrid.defaults.editors, { textarea: { init: function(container, options){ var input ...
- nginx返回固定字符串
在系统还没有做集群的情况下,直接重启项目时刚好用户在使用的话,一般都会受到投诉,那么使用nginx返回类似“系统维护”的提示信息并且提前在应用上面做通知才是合适的做法 那么记录一下nginx里面的配置 ...
- JS将后台获取毫秒数转换为自定义格式日期
重写prototype Date.prototype.Format = function(fmt) { var o = { "M+" : this.getMonth()+1, / ...
- 在jenkins打开roboframework报告:Opening Robot Framework report failed
来源自: https://blog.51cto.com/icestick8586/1884615 --------------------------------------------------- ...