介绍开源的.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通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地 ...
随机推荐
- 使用Go开发web服务器
原文链接 Go(Golang.org)是在标准库中提供HTTP协议支持的系统语言,通过他可以快速简单的开发一个web服务器.同时,Go语言为开发者提供了很多便利.这本篇博客中我们将列出使用Go开发HT ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数·简明中文手册 总览
<zw版·Halcon-delphi系列原创教程> Halcon分类函数·简明中文手册 总览 Halcon函数库非常庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核 ...
- xib中的view对iPhone和iPad自适应
1 This worked for me: Make a copy of the .xib in the Finder. Open the copied file in a text edito ...
- 遍历对象所有属性(json对象)
var response = { "status": 1, "message": "\u6210\u529f", "data&qu ...
- 【转】SVN管理多个项目版本库
转载地址:http://blog.163.com/zhangxuemin_zy/blog/static/10178565520115704031799/ SVN管理多个项目版本库: 安装SVN服务 ...
- BooleanToVisibilityConverter.cs
//---------------------------------------------------------------------------- // // Copyright (C) M ...
- python之rabbitMQ篇
一.RabbitMQ安装 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统,它遵循Mozilla Pulic License开源协议. MQ全称为Message Queue,消息队列 ...
- log4j2的使用
预备知识 日志级别:log4j默认六个级别,即trace.debug.info.warn.error.fatal ,对应意味着该消息为追踪.调试.普通信息.警告.错误.严重错误.可以根据需要子定义其他 ...
- qq2440启动linux后插入u盘出现usb 1-1: device descriptor read/64, error -110,usb 1-1: device not accepting address 8, error -110
上位机:ubuntu14.04 64bit 下位机:qq2440 交叉编译器:arm-linux-gcc 3.4.1 下位机使用的linux内核版本:kernel2.6.13 1.插入u盘时错误信息如 ...
- VirtualBox4.3.12 Centos6.5-i386 设置共享文件夹
新在虚拟机下安装个CentOS6.5,准备设置个与win7的共享文件夹,遇到一个问题,搞了好几天呢 现在先说一下: 首先,在虚拟机下安装好CentOS这里不说了 然后启动,点击安装增强功能 如下图: ...