内容简介:组件的最新版本是构建
BeetleX
的使用非常简单,通过 Stream
的数据流模式可以让你轻松处理网络数据;在处理 SSL
加密通讯的时候组件的使用也是非常方便,只需要简单的配置证书即可完成基于 SSL
的网络安全通讯,接下来介绍一下通过组件快速构建一个安全可靠的网络服务。
引用组件
组件的最新版本是 1.4.9.6
可以通过访问 https://www.nuget.org/packages/BeetleX/ 获取最新版本,或直接通过 Nuget
进行安全组件。
证书文件
构建 SSL
服务需要一个 pfx
的证书文件,可以通过相关命令创建,如果不想麻烦可以通过 vs
在项目中签名中添加一个即可创建一个 pfx
文件作为 SSL
服务的证书文件。
定义协议数据
任何网络通讯都具有一个应用协议,主要作用是根据网络的字节流信息还原成具体可以操作的数据信息对象。组件通过 IPacket
接口来定义一个协议解释器
public interface IPacket : IDisposable { EventHandler<PacketDecodeCompletedEventArgs> Completed { get; set; } IPacket Clone(); void Decode(ISession session, Stream stream); void Encode(object data, ISession session, Stream stream); byte[] Encode(object data, IServer server); ArraySegment<byte> Encode(object data, IServer server, byte[] buffer); }
这个接口主要用于描述协议编码和解码的工作,并提供一个委托来触发消息解释完成的回调。实现这个接口需要一些工作不过组件提供了一个基础的协议封包类 FixedHeaderPacket
,主要用于解决头大小描述的消息体;接下来定义一个简单的 String
消息协议处理器
public class StringPacket : BeetleX.Packets.FixedHeaderPacket { public override IPacket Clone() { return new StringPacket(); } protected override object OnRead(ISession session, PipeStream stream) { return stream.ReadString(CurrentSize); } protected override void OnWrite(ISession session, object data, PipeStream stream) { stream.Write((string)data); } }
通过重写 OnRead
和 OnWrite
两个方法来处理封包和解包的工作。这个协议解释器的具体协议格如下: |payload size|payload|
构建服务
有了协议分析类接下来的工作就可以实现一个基于 String
传递的网络服务
class Program : ServerHandlerBase { private static IServer server; public static void Main(string[] args) { server = SocketFactory.CreateTcpServer<Program,StringPacket>(); server.Options.DefaultListen.SSL = true; server.Options.DefaultListen.CertificateFile = "test.pfx"; server.Options.DefaultListen.CertificatePassword = "123456"; server.Options.LogLevel = LogType.Info; server.Open(); Console.Read(); } protected override void OnReceiveMessage(IServer server, ISession session, object message) { Console.WriteLine(message); server.Send($"hello {message}", session); } }
可以通过 SocketFactory.CreateTcpServer
方法来构建一个 TCP
服务,方法需要带上接受网络处理事件的 IServerHandler
和一个协议解释对象 IPacket
.以上服务是重写 OnReceiveMessage
方法接收请求的消息处理并返回; IServerHandler
除也可以定义接收消息外还提供其他方法实现用于监控连接的不同事件处理,详细下如:
public interface IServerHandler { void Connected(IServer server, ConnectedEventArgs e); void Connecting(IServer server, ConnectingEventArgs e); void Disconnect(IServer server, SessionEventArgs e); void Error(IServer server, ServerErrorEventArgs e); void Log(IServer server, ServerLogEventArgs e); void SessionDetection(IServer server, SessionDetectionEventArgs e); void SessionPacketDecodeCompleted(IServer server, PacketDecodeCompletedEventArgs e); void SessionReceive(IServer server, SessionReceiveEventArgs e); }
SSL配置
在打开服务端可以通过 server.Options
来配置相应的 SSL
,主要配置如下:
server.Options.DefaultListen.SSL = true; server.Options.DefaultListen.CertificateFile = "test.pfx"; server.Options.DefaultListen.CertificatePassword = "123456";
通过以上配置就可以启用一个 SSL
服务,启动服务后可以看到服务的详细信息
客户端访问
组件同样提供相应的客户端类来访问相关服务,不过在访问服务的时候同样需要定义一个协议解释器
public class StringPacket : BeetleX.Packets.FixeHeaderClientPacket { public override IClientPacket Clone() { return new StringPacket(); } protected override object OnRead(IClient client, PipeStream stream) { return stream.ReadString(CurrentSize); } protected override void OnWrite(object data, IClient client, PipeStream stream) { stream.Write((string)data); } }
定义协议解释器后,就可以 创 建一个访问对象了; 组件提供几个客户端访问类分别是: TcpClien
同步, AsyncTcpClient
异步和 AwaiterClient
支持 await
。 接下来通过 AwaiterClient
来访问服务:
AwaiterClient client = new AwaiterClient("127.0.0.1", 9090, new StringPacket(), "test"); client.CertificateValidationCallback = (s, e, c, p) => true; while (true) { Console.Write("Enter Name:"); var line = Console.ReadLine(); client.Send(line); var result = await client.Receive(); Console.WriteLine($"{DateTime.Now} {result}"); }
在使用 SSL
时很多时候可以因为服务名导致无法通过验证,所以可以通过定义 CertificateValidationCallback
返回 True
来忽略相关验证.这样一个基于 SSL
访问的网络程序就完成,最后可以通过服务端的日志查看相关工作情况:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用Peach简化Socket网络通讯协议开发
- t-io 3.2.5 发布,让天下没有难开发的网络通讯
- 中兴通讯中标中国移动5G SA核心网商用网络
- 中兴通讯实力打造适配现在与未来网络的IPv6基石
- 中兴通讯获6项SDN/NFV大奖背后:网络转型走入“深水期”
- 全球十余家运营商遭黑客入侵,必要时可切断通讯网络
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。