原文网址: 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框架之一 首字节验证的更多相关文章

  1. 介绍开源的.net通信框架NetworkComms框架 源码分析

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 售价249英镑 我曾经花了 ...

  2. 介绍开源的.net通信框架NetworkComms框架之二 传递类

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地 ...

  3. 介绍开源的.net通信框架NetworkComms框架之四 消息边界

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  4. 介绍开源的.net通信框架NetworkComms框架 源码分析(三)PacketHeader

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  5. 介绍开源的.net通信框架NetworkComms框架之五 心跳检测

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  6. 介绍开源的.net通信框架NetworkComms框架之九 合并DLL

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  7. 介绍开源的.net通信框架NetworkComms

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

  8. 介绍开源的.net通信框架NetworkComms框架 源码分析(二)ConnectionInfo

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  9. 介绍开源的.net通信框架NetworkComms框架之三 传递List

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地 ...

随机推荐

  1. RabbitMq 应用

    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展. 前提是你的RabbitMq服务已搭建好,制作一个winfor ...

  2. Python快速建站系列-Part.Two-结构化和布局

    |版权声明:本文为博主原创文章,未经博主允许不得转载. 首先明确我们要建一个什么样的站,作为教程(也算自己使用tornado的一个小总结),自然功能不能太多,但又满足一个普通网站需要的就行了. 目前想 ...

  3. C#学校班级自动升级实现代码

    代码逻辑如下: //班级自动升级 //获取该学校还没有毕业的班级 List<ClassInfoes> classinfoeslist = classinfoesbll.GetList(Sc ...

  4. c++ type_info and typeid

    c++ type_info and typeid typeid 关键字typeid提供了对一个对象查询类型的功能. 该关键字和dynami_cast一起提供了c++的RTTI(rumtime type ...

  5. logback文章推荐

    logback 配置详解:http://www.cnblogs.com/zhuawang/p/4002975.html Logback 日志输出到 mysql:http://www.codeweblo ...

  6. UBI系统原理分析【转】

    转自:http://blog.chinaunix.net/uid-28236237-id-4164656.html 综述 UBI全称Unsorted Block Images,是一种原始flash设备 ...

  7. 腾讯数据总监:运营人员必须掌握的APP基础数据分析体系(没有比这篇更系统全面的)

    导读:在互联网企业,任何一个APP都要事先规划好数据体系,才允许上线运营,有了数据才可以更好的科学运营.因此本文将为大家介绍APP的基础数据指标体系.主要分为五个维度,包括用户规模与质量.参与度分析. ...

  8. 【转】Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/14/251244.html ...

  9. WEB前端的原理及组成

    1:认识WEB前端的组成部分和相关专业术语!具体的总结如下:

  10. php程序员的水平 看看自己属于那个级别的

    文章链接:http://www.oschina.net/question/570781_60150?sort=time&p=4#answers