文档章节

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

jamesvon
 jamesvon
发布于 2017/07/22 23:13
字数 674
阅读 13
收藏 0

在上一文档中我们已经建立好了一个链式结构用于存储用户信息,这样我们就可以开始建立P2P的服务功能了,首先我们先建两个基础函数,即注册用户和登录函数,注册函数是将用户的基本资料进行注册,登录函数则是将用户信息与链表中的数据进行比较,查找出匹配的用户资料,完成登录,登录后前端会得到一个rt_code用户以后就可以使用这个rt_code来进行与服务的交互了。

/// <summary>处理用户登录请求并将登录结果返回给用户</summary>
void doUserLogin(lp_message msg)
{	//<username>,<userPassword>,<appCode>,<machineCode>
	char *username = &msg->buff[6];
	char *userPassword = strchr(username, ',');
	userPassword[0] = 0; userPassword += 1;
	char *appCode = strchr(userPassword, ',');
	appCode[0] = 0; appCode += 1;
	char *machineCode = strchr(appCode, ',');
	machineCode[0] = 0; machineCode += 1;
	lp_client client = regClient(username, userPassword, appCode, machineCode, msg->addr.sin_addr, msg->addr.sin_port);
	int addr_len = sizeof(SOCKADDR_IN);
	if (client == NULL) sendto(hServer, "FAILED", 6, 0, (SOCKADDR*)&msg->addr, addr_len);
	else
	{
		char buff[38];
		MoveMemory(buff, "SUCCES", 6);
		MoveMemory(&buff[6], client->runtimeCode, 32);
		sendto(hServer, buff, 38, 0, (SOCKADDR*)&msg->addr, addr_len);
	}
}
/// <summary>处理用户注册信息</summary>
unsigned doRegistUser(lp_message msg)
{	//<username>,<userPassword>,<appCode>,<machineCode>
	lp_client client = (lp_client)malloc(sizeof(_client));
	memset(client, 0, sizeof(_client));
	char *s = msg->buff + 6;
	char *p = strchr(s, ',');
	strncpy(client->userName, s, p - s);	s = p + 1; p = strchr(s, ',');
	strncpy(client->userPassword, s, p - s ); s = p + 1; p = strchr(s, ',');
	strncpy(client->appCode, s, p - s); s = p + 1; 
	strcpy(client->machineCode, s); 
	addClient(client);
	int addr_len = sizeof(SOCKADDR_IN);
	if (client == NULL) sendto(hServer, "FAILED", 6, 0, (SOCKADDR*)&msg->addr, addr_len);
	return 0;
}

建立好这两个函数后,我们就可以将这两个函数放到服务内容中了,即修改receivedMessage函数中的内容,实现根据命令访问这两个函数的功能。

/// <summary>处理接收到的信息</summary>
unsigned WINAPI receivedMessage(void *arg)
{
	lp_message msg = (lp_message)arg;
	if (strncmp(msg->buff, "REGUSR", 6) == 0)doRegistUser(msg);
	if (strncmp(msg->buff, "USRLGN", 6) == 0)doUserLogin(msg);
	printf("Received a [%s] from client %s, string is: %s\n", msg->buff, inet_ntoa(msg->addr.sin_addr), msg->buff);
	//do anything

	free(msg);
	return 0;
}

可以看到我们只是增加了两句话,分别对应msg的前六个字母,即通讯的命令名称,这样我们就可以根据这6个字母的内容找到相应的执行函数了。

通过以上这个机制我们就可以简单实现了P2P的服务响应, 同时建立好了具有良好扩展机制的服务框架。大家可以根据这一模式扩展出适合自己应用的服务函数,同时完成各种应用管理及服务。

这样我们就完成了P2P的服务系统的搭建,用户可以根据自己的需求对这一框架进行调整和补充,完成更加复杂的应用。

© 著作权归作者所有

共有 人打赏支持
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
OpenVPN中TAP-win32d的net30问题

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

晨曦之光
2012/04/10
702
0
七牛云 RTN:基于 WebRTC 零基础搭建实时音视频平台

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

七牛云
2018/07/20
0
0
有了WCF,Socket是否已人老珠黄?

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

付翔
2013/01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
今天
2
0
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
7
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
10
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
9
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部