介绍开源的.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>(, 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通信框架NetworkComms框架 源码分析
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 售价249英镑 我曾经花了 ...
- 介绍开源的.net通信框架NetworkComms框架之二 传递类
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地 ...
- 介绍开源的.net通信框架NetworkComms框架之四 消息边界
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(三)PacketHeader
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架之五 心跳检测
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架之九 合并DLL
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms
Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地址是:https://github.com/MarcFletcher/ ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(二)ConnectionInfo
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架之三 传递List
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地 ...
随机推荐
- Latex 学习
Latex 学习 @(05.2 Latex)[latex][基础教程] 这篇文章是关于latex基础教程.pdf的一个总结. 基本知识 基础 1. 空格 多个空格会被视为一个空格 单个回车会被视为一个 ...
- PHP---------去除数组里面值为空或者为空字符串的元素
array_filter(array('a'=>'','',null,'b'=>3),function($val){ if($val===''||$val===null){ ...
- mssql手工注入及绕过术
报错注入: - 例子:http://www.kfgtfcj.xxx.cn/lzygg/Zixun_show.aspx?id=1 [1]首先爆版本:http://www.kfgtfcj.xxx.cn ...
- C++之路进阶——bzoj2879(美食节)
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1304 Solved: 702[Submit][Status] ...
- 【001:Tomcat搭建简单文件服务器】
1.下载 tomcat 软件包 2.在webapps/Root 下放置需要下载的文件 3.运行 tomcat / bin目录 下的startup.sh 4.访问 ip+8080端口
- sql join 优化
项目查询列表,需要新关联一张表,于是就让组下小伙更改了下sql语句,当再次进入列表查询时查询时间一下子就翻倍.那小伙找了半天没找原因. 于是我就打开代码查看,关联的一张表数据非常多,用的left jo ...
- eclipse快捷方式
虽说右键可以直接发送快捷方式到桌面,但是点击桌面图标确提示错误,偶然发现右键选个什么,配置下启动文件就ok了(就是链接到安装目录里面那个可以启动的exe),后来怎么复现不了,伤感了,不过是可以用了,还 ...
- UICollectionViewDelegateFlowLayout 使用
import UIKit //UICollectionViewLayout //itemSize属性 //设定全局的Cell尺寸,如果想要单独定义某个Cell的尺寸,可以使用下面方法: // - (C ...
- android界面横屏和竖屏的切换
关于android横屏和竖屏的切换网上给了很多种.但是有些介绍的方法都是在android旧版本上. 我现在把握用到的情况写下来用于备忘: android 版本:4.0 - 4.4 要求:android ...
- Walls(floyd POJ1161)
Walls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7677 Accepted: 3719 Description ...