星空网 > 软件开发 > ASP.net

介绍开源的.net通信框架NetworkComms框架之一 首字节验证

原文网址: http://www.cnblogs.com/csdev

Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地址是:https://github.com/MarcFletcher/NetworkComms.Net

使用networkcomms框架通信时,客户端发送消息,服务器端回复消息。

确保收到的消息,是用户发来的,而不是恶意消息,可以在networkcomms框架中加入首字节验证机制。

思路是这样的:

如果服务器端收到的消息是 登录消息,则进行处理,如果登陆成功,则首字节验证成功,服务器可以处理当前连接上后续的消息。

如果服务器没有收到登录消息,只是收到了其他类型的消息,则不进行处理。

这样可以确保收到的消息,都是登录用户发来的,确保了通信安全。

networkcomms框架本身没有这个机制,我们来加入这个机制。

第一步: 在 ConnectionInfo类中加入FirstVerify成员

 

 public bool FirstVerify { get; set; }

第二步,在Networkcomms类中,加入FirstVerify 成员

 public static bool FirstVerify { get; set; }

第三步,修改ReservedPacketType枚举类型

这个类型是通信框架内置的消息类型,属于保留消息类型,这个类型的数据被处理的优先级很高。

 enum ReservedPacketType  {    Confirmation,    CheckSumFailResend,    AliveTestPacket,    ConnectionSetup,    Unmanaged,    NestedPacket,    UserLogin,    }

UserLogin是我们的登录类型。

 

第四步:修改ConnectionIncomingData.cs文件中相关方法 红色部分是新加入的

//如果是内部类型,直接进行处理 
if (isReservedPacketType) {#if WINDOWS_PHONE ||.NETFX_CORE QueueItemPriority priority = QueueItemPriority.Normal;#else QueueItemPriority priority = (QueueItemPriority)Thread.CurrentThread.Priority;#endif PriorityQueueItem item = new PriorityQueueItem(priority, this, topPacketHeader, packetBuilder.ReadDataSection(packetHeaderSize, topPacketHeader.TotalPayloadSize), incomingPacketSendReceiveOptions); if (NetworkComms.LoggingEnabled) NetworkComms.Logger.Trace(" ... handling packet type '" + topPacketHeader.PacketType + "' inline. Loop index - " + loopCounter.ToString() + packetSeqNumStr); NetworkComms.CompleteIncomingItemTask(item); } else { //如果需要验证并且验证通过 或者不需要验证 进行处理 if ((NetworkComms.FirstVerify == true && this.ConnectionInfo.FirstVerify == true)||NetworkComms.FirstVerify==false) {

 

客户端登录代码:

大致如下  UserLogin是登录的消息类型

userLoginContract是自定义的类  可以根据实际情况进行定义

  UserLoginContract loginContract = newTcpConnection.SendReceiveObject<UserInfo, UserLoginContract>("UserLogin", "ResUserLogin", 5000, userInfo);

 

服务器端:

  NetworkComms.FirstVerify = true;

 这句的意思是,启用首字节验证,如果设定为false,则不进行首字节验证。

 

  在处理登录的方法中

//处理用户登录<4>
private void IncomingLoginHandler(PacketHeader header, Connection connection, UserInfo userInfo)
{

 

      //验证用户登录

 

      如果登录成功  

     设定首字节验证成功

 connection.ConnectionInfo.FirstVerify = true;

  }

原文网址: http://www.cnblogs.com/csdev




原标题:介绍开源的.net通信框架NetworkComms框架之一 首字节验证

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

Lazada&shopee开店入驻需要哪些资质?:https://www.ikjzd.com/articles/135982
沙特电子商务交易量跃升至440亿里亚尔:https://www.ikjzd.com/articles/135983
Google购物广告Feed全方位解读及优化:https://www.ikjzd.com/articles/135984
海外华人双十一买了这些东西:和面机 洛丽塔服饰:https://www.ikjzd.com/articles/135985
Shopify黑五网一战报:GMV增76%至52亿美元 日本增幅最大:https://www.ikjzd.com/articles/135986
三大行业对英国无协议脱欧风险发出警告:https://www.ikjzd.com/articles/135988
深圳玉龙公园簕杜鹃花海花期时间+门票+交通:https://www.vstour.cn/a/365174.html
出境旅游预订须知:https://www.vstour.cn/a/365175.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流