文档章节

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

jamesvon
 jamesvon
发布于 2017/07/22 13:43
字数 756
阅读 19
收藏 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
7.5K
0
高性能的网络应用的C++库--Herm

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

匿名
2010/10/31
9.8K
0
阿里云上线视频云剪辑 快速产出PGC短视频不再是问题!

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

音染
2017/07/21
55
0
OpenVPN中TAP-win32d的net30问题

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

晨曦之光
2012/04/10
577
0
P2P、P2C、O2O、B2C、B2B、C2C 的各个模式的区别

 P2P -------------------------------------------------------------------------------------------------------------------------------------------   P2P 借贷是一种将非常小额度的......

Idea
11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux-scp 远程拷贝报错原因

刚拿到一台重装后的服务器,远程ssh都正常,但是一scp拷贝东西就报错: 本地确定是有scp命令的,而且如果是本地没有scp不会报后面那句lost connection,因此就是远程没有scp这个命令。因此在...

linuxprobe16
13分钟前
0
0
OSChina 周六乱弹 —— 谁小时候没当过熊孩子呀

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《行尸走肉》- amazarashi 《行尸走肉》- amazarashi 手机党少年们想听歌,请使劲儿戳(这里) @神话 :周五了,周末干啥...

小小编辑
38分钟前
23
1
docker部署springboot项目

安装docker 菜鸟教程 springboot项目 maven依赖 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001......

yimingkeji
今天
14
0
1: Cordova 配置WebView可以打开外部链接

一、问题:在使用Cordova生成的Android App中默认情况下WebView中的超链接,如果不是相对链接,会默认使用浏览器打开。 如果想用默认webview打开 解决方案:修改config.xml文件添加链接配置节...

wecloudnet
今天
1
0
Beetl介绍以及集成SpringBoot2.0 ---《Beetl视频课程》(1)

目的:引导阅读官方文档 目标:实现一个自己的博客 一、Beetl介绍 Beetl目前版本是2.9.3,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点。使得开发...

Gavin-King
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部