文档章节

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

jamesvon
 jamesvon
发布于 2017/07/22 23:13
字数 674
阅读 11
收藏 0
点赞 0
评论 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
五款 Slack 开源替代品

Slack 是非常流行的团队沟通应用,提供群组聊天和直接消息发送功能,支持移动端,Web 和桌面平台。Slack 为用户带来大量的便利,但是也有一些不太好的地方,比如高昂的订阅费用和私有数据泄漏...

OSC编辑部
2015/11/10
19.9K
13
有了WCF,Socket是否已人老珠黄?

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

付翔
2013/01/05
0
0
Sopcast的网友评论

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

红薯
2009/12/11
788
4
P2P流媒体直播系统--Sopcast

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

匿名
2009/05/12
17.9K
4
利用WCF的P2P共享剪贴板上的数据

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

王二狗子11
01/01
0
0
释放技术的想象 解码腾讯云软件架构与应用

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

2017/12/18
0
0
2018年最具投资潜力的五款数字货币

在互联网高速发展的时代,数字货币作为一种全新理念的货币开始登上历史的舞台。凭借着区块链这个底层技术和基础架构的支持,开始悄然发展。数字货币经过近十多年的发展,已从最开始的独苗,发...

未来财经
2017/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

扫码二维码跳转到某个网站

添加maven依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.goog......

gaomq
8分钟前
0
0
Windows平台下搭建Git服务器的图文教程

Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己...

MKChan
14分钟前
0
0
告警系统主脚本&告警系统配置文件&告警系统监控项目

20.20 告警系统主脚本 准备工作 定义监控系统的各个目录,然后再去定义主脚本,因为是分布式的,所以需要每一台机器都需要定义,事先创建好各个脚本和各个目录,随后脚本直接拷贝过去即可,然...

影夜Linux
14分钟前
0
0
谈谈神秘的ES6——(一)初识ECMAScript

谈谈神秘的ES6——(一)初识ECMAScript 在《零基础入门JavaScript》我们就说过,ECMAScript是JavaScript的核心,是JavaScript语法和语义的解释器,同时也是一个标准。而ECMAScript标准其实也...

JandenMa
今天
1
0
第16章 Tomcat配置

16.1 Tomcat介绍 ####Tomcat介绍 LNMP架构针对的开发语言是PHP语言,php 是一门开发web程序非常流行的语言,早些年流行的是asp,在Windows平台上运行的一种编程语言,但安全性差,就网站开发...

Linux学习笔记
今天
0
0
流利阅读笔记29-20180718待学习

高等教育未来成谜,前景到底在哪里? Ray 2018-07-18 1.今日导读 在这个信息爆炸的年代,获取知识是一件越来越容易的事情。人们曾经认为,如此的时代进步会给高等教育带来众多便利。但事实的...

aibinxiao
今天
12
0
OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
今天
604
19
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
今天
5
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部