文档章节

Windows平台上实现P2P服务(三)

jamesvon
 jamesvon
发布于 2017/07/22 13:43
字数 756
阅读 18
收藏 0
点赞 0
评论 0

我们已经建立好一个UDP的服务程序了,下面我们要给这个服务程序添加服务内容了。

其服务内容将根据通讯的客户端请求来进行定义和处理。首先我们再回顾一下通讯内容的定义:

/// <summary>信息结构的指针型</summary>
typedef struct _message *lp_message;
/// <summary>信息结构</summary>
typedef struct _message
{
	union {
		struct { char buff[1030]; };
		struct { char cmd[6]; char rt_code[32]; char data[992]; };
	};
	SOCKADDR_IN addr;
};

通讯内容大致分为三部分,第一个部分为6字节的命令名称,第二部分为32字节的运行码,第三部分为数据区。那么我们的服务内容将根据前6位的命令名称来提供,这需要我们先定义一个服务内容的基本函数结构,未来的其他概念都可以沿用这一格式来进行定义。

void do<command>(lp_message msg)
{
	... ...
}

函数只有一个参数,就是我们上面定义的信息结构的指针。由于我们在接受信息时其客户端信息也是采用这个结构的addr来进行的,也就是说客户端的通讯信息也存储在这一结构中了,这就使得我们可以在函数内完成回送等复杂业务。

我们首先定义一个注册和登录函数,这两个函数是服务的基础,这两个命令不同于其他的命令信息,他们在运行时用户信息尚未建立,因此不存在rt_code的内容,因此我们在处理过程中也不会用到rt_code,我们会直接使用buff来进行处理。

在这里我先做个声明,讲解一下系统安全机制,系统将根据用户的“应用编码”、“设备编码”+“用户名”、“口令”的方式进行验证,系统在验证通过后,将向客户端发送一个rt_code作为今后通讯的入口,这个rt_code在每次登陆后都会重新定义,同时我们还可以设定一个rt_code的有效期,因此,在登录后我们在通讯过程中,只需要提供rt_code就可以完成认证,这将隐含掉用户的其他重要信息,简介的防止了客户信息被泄露,如果基于安全的需要我们还可以采用时间戳技术将时间戳增加到通讯内容中,同时利用这个时间戳对rt_code进行加密处理,我在这里就不在详细描述了,大家可以根据自己的需要对这一机制进行完善和补充,我们这里主要实现这一机制的最简单方式。

系统需要将用户信息,以及rt_code进行缓存,在这里我们使用一种简单的链表结构进行存储,这种结构十分简单,同时支持添加修改和删除,简单便于查找和定位。

 

© 著作权归作者所有

共有 人打赏支持
jamesvon
粉丝 3
博文 31
码字总数 47875
作品 0
河西
项目经理
P2P计算平台--JXTA

JXTA是一个用来解决P2P计算的开放的网络计算平台。JXTAP2P平台使开发者在其上建立P toP的应用。2001年4月,发布了第一个源型实现,它是基于JDK1.1.4的。 现有的P2P系统有一些缺陷,大多数P2P...

匿名 ⋅ 2009/04/06 ⋅ 0

阿里云上线视频云剪辑 快速产出PGC短视频不再是问题!

摘要: PCDN相对于CDN拥有成本更低、质量更好两方面的核心优势。本文将为大家详细介绍PCDN的定义、名词、功能、架构、场景和优势。 写在前面: CDN是目前广泛应用于视频云行业的内容分发加速...

音染 ⋅ 2017/07/21 ⋅ 0

OpenVPN中TAP-win32d的net30问题

OpenVPN中有个topology参数,该参数控制了tun模式下如何为OpenVPN客户端分配虚拟IP地址。在OpenVPN的manpage中,明确指出tun模式下对于windows平台不能使用p2p拓扑,有人说这是没有必要的,因...

晨曦之光 ⋅ 2012/04/10 ⋅ 0

高性能的网络应用的C++库--Herm

Herm是一套快速开发高性能的网络应用的C++库。比如开发网络游戏、即时通信、流媒体、文件下载、P2P等基于TCP/IP网络应用。(此项目已经不存在) Herm包括三个组件: (1)Utilities 最基础的...

匿名 ⋅ 2010/10/31 ⋅ 0

有了WCF,Socket是否已人老珠黄?

1. Socket相关背景   Socket,中文译为“套接字”,最早在UNIX中引入并得到广泛应用,后来微软在设计Windows时引入了UNIX中的这个概念和相应的设计理念,并针对Windows的特性略作调整,形成...

付翔 ⋅ 2013/01/05 ⋅ 0

Sopcast的网友评论

SopCast是一个简单易用的软件(非开源),使用他可以在互联网上免费播出音频、视频节目,也可以通过互联网观看节目。SopCast采用P2P(Peer- to-Peer)技术传输数据,非常高效。使用SopCast每个...

红薯 ⋅ 2009/12/11 ⋅ 4

P2P流媒体直播系统--Sopcast

SopCast是一个简单易用的软件(非开源),使用他可以在互联网上免费播出音频、视频节目,也可以通过互联网观看节目。SopCast采用P2P(Peer- to-Peer)技术传输数据,非常高效。使用SopCast每个...

匿名 ⋅ 2009/05/12 ⋅ 4

利用WCF的P2P共享剪贴板上的数据

WCF与P2P WCF是用来实现数据通信的,这篇文章中。我将带领大家进入WCF的P2P的世界。通过一个实例,说明WCF中使用P2P。 首先让我们了解一下什么是P2P。详细见:P2P。这里根据我的理解,结合W...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

利用WCF的P2P共享剪贴板上的数据

WCF与P2P WCF是用来实现数据通信的,这篇文章中。我将带领大家进入WCF的P2P的世界。通过一个实例,说明WCF中使用P2P。 首先让我们了解一下什么是P2P。详细见:P2P。这里根据我的理解,结合W...

王二狗子11 ⋅ 01/01 ⋅ 0

释放技术的想象 解码腾讯云软件架构与应用

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 关于腾讯 你可能玩过“王者荣耀” 你可能用过“微信”和它的“小程序” 你可能看过“腾讯视频”并且曾为之付费 你可能已经是多年的...

⋅ 2017/12/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部