文档章节

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

jamesvon
 jamesvon
发布于 2017/07/22 23:13
字数 674
阅读 12
收藏 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
577
0
七牛云 RTN:基于 WebRTC 零基础搭建实时音视频平台

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

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

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

付翔
2013/01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部