文档章节

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
阿里云上线视频云剪辑 快速产出PGC短视频不再是问题!

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

音染
2017/07/21
55
0
七牛云 RTN:基于 WebRTC 零基础搭建实时音视频平台

引言 近年来,在线教育、狼人杀、在线抓娃娃、线上 KTV 等多人视频互动模式不断涌现,实时音视频通信风头正劲,实时音视频技术 WebRTC 也因此受到了广泛关注。相关数据显示,2017-2021 年期间...

七牛云
07/20
0
0
OpenVPN中TAP-win32d的net30问题

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

晨曦之光
2012/04/10
577
0
有了WCF,Socket是否已人老珠黄?

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

付翔
2013/01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 使用parent方式引用时 获取值属性方式默认@

采用官网提供的 引入依赖时,application.properties中的值变量,无法通过${}获取,这是由于Spring Boot 已经将字符方式调整为 <resource.delimiter>@</resource.delimiter>。故如果在,工程中...

翱翔fly
19分钟前
1
0
HTTPS证书验证流程及SSL证书生成步骤【附nginx开启https配置】

------------------------------------------------------------ HTTPS证书验证流程(极简化版) 1.客户端向服务端请求证书(server.crt) 2.服务端下发证书(server.crt) 3.客户端用预制的...

xiaomin0322
20分钟前
1
0
预编译sql语句和参数化sql能有效防止——sql注入攻击——

预编译和参数化处理sql原理类似: 参数化处理sql 是将参数进行了字符串化处理,把参数中的单引号,井号#,等都做了转义处理,进而在执行sql语句时不会被当做sql中的定界符和指定符来执行。 ...

fang_faye
21分钟前
1
0
springboot最全配置解释

​​​​​​​# ----------------------------------------# 核心属性# ----------------------------------------# 文件编码banner.charset= UTF-8# 文件位置banner.locati...

废柴大叔
22分钟前
72
1
(大致了解下)从单机到2000万QPS: 知乎Redis平台发展与演进之路

导读:知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动化运维服务体系,提供很多强大的功能。本文作者是是该系统的负责人,文...

Ocean_K
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部