C/S+P2P网络模型(一)--聊天
原文地址:http://blog.csdn.net/whoami021/article/details/21577415
从今天开始我们来实现一个C/S+P2P网络模型,主要功能包括:聊天和传输文件。
聊天分群聊和私聊,虽然不是真的像QQ那样有个QQ群,但是这样类比容易理解,在后面我们会仔细说明。
前面我写过一篇文章讲过组播,我们就用组播来实现p2p网络模型。首先而且是最关键的一点是:每一个程序实例都对应一个peer结点。接下来我们先来解释整个程序代码框架,再分聊天和传输文件详细说明。
我们先看整个程序框架。
整个程序框架主要包括两个模块和一些实体类。
网络模块:实现两个网络模型,一个是C/S,另一个是P2P。
消息模块:网络消息所使用的消息类。
实体类:包括结点类和管理类等。
下面我们看聊天怎么实现。
1.要实现聊天,首先用户要登录。登录主要用到C/S模型,我们使用一个服务器,用户登录时将用户信息发送给服务器,服务器验证用户信息并给用户回发确认消息,同时记录每一个登录的用户,在用户发出获取当前在线用户列表的请求时返回该列表。
2.聊天分群聊和私聊。聊天需要用到P2P模型,不需要跟服务器打交道,直接将聊天消息发往各个用户,当然在获取当前在线用户列表的时候还是要请求服务器的。
①默认情况下是群聊,我们可以采用组播的方式实现。
②私聊要经过下面几个步骤:
i. 获取在线用户列表。往服务器发送请求,由服务器将列表信息返回。
ii.选中一个用户,将接收方加入消息头后进行组播。在这里我使用名字唯一来标识,所以可以根据名字来唯一确定用户。
iii. 关键在这里,在接收组播消息后,首先解析消息类型,假设是PrivateMessage,如果发现消息中的接收方是自己就接收处理,否则就抛弃。
为了尽量减少代码量,好让大家容易理解,我没有使用界面。
由于代码文件比较多,需要的可以在这里下载。
上面只是实现了聊天功能,下一篇文章将会实现文件传输功能。
C/S+P2P网络模型(一)--聊天相关推荐
- 【flex chat】 p2p视频语音聊天室 欢迎你的测试
[flex chat] p2p视频语音聊天室 欢迎你的测试, 花了我2个星期的时间,相对来说比较完善了,用的是Adobe提供的P2P服务器.后期有时间可以继续开发,以现有的功能可以实现视频会议.视频客 ...
- C# P2P实现点对点聊天
P2P,英文Peer-to-Peer的缩写,中译为对等互联或点对点技术.P2P技术可以让用户可以直接连接到其他用户的计算机,进行文件共享与交换,同时P2P在深度搜索.分布计算.协同工作等方面也大有用途 ...
- C/S+P2P网络模型(二)--上传下载文件
原文地址:http://blog.csdn.net/whoami021/article/details/21656875 上一篇文章我们实现聊天的功能,下面我们看文件传输怎么实现. 我的做法是:增加一 ...
- Flash P2P 语音视频聊天示例
1. 前提 1.1需要ADOBE官网上的例子 http://labs.adobe.com/technologies/stratus/samples/#resource ...
- P2P网络——网络模型概述
P2P网络模型 一.常见网络模型 1.随机网络:随机网络的研究是基于随机图理论的. 2.规则网络:常见的规则网络有最近邻耦合网络和星形耦合网络. 3.小世界网络 二. ...
- Peer to Peer ( P2P ) 综述
1 绪言 1.1 Peer-To-Peer 介绍 最近几年,对等计算( Peer-to-Peer,简称P2P) 迅速成为计算机界关注的热门话题之一,财富杂志更将P2P列为影响Internet未来的四项 ...
- 基于Sip的P2P设计和原理分析
基于Sip的P2P设计和原理分析 1. SIP网络 2. P2P技术在互联网上的应用 3. P2P网络架构 3.1. 集中目录式 ...
- 再谈P2P技术:网络拓扑结构、核心技术分析
随着P2P应用的蓬勃发展,作为P2P应用中核心问题的发现技术除了遵循技术本身的逻辑以外,也受到某些技术的发展趋势.需求趋势的深刻影响. P2P协议概述 P2P打破了传统的Client/Server ( ...
- 【zz】P2P技术简介—by红瞳
P2P技术简介-by红瞳 转载自:http://darken99.spaces.live.com/blog/cns!6b19436cd6f6de66!148.entry 点对点技术与点对点协议的区别 ...
最新文章
- Index of Spring
- python web开发-flask访问请求数据request
- 【C++的深度剖析教程21】类型转换函数下
- Python与机器视觉(二)读入图片并显示
- 关键字:auto、static、register、const、volatile 、extern 总结
- Python内置函数之-struct
- 仿斗鱼、美团、网易邮箱等 弹窗效果
- 大数据集群安装02之Hadoop配置
- java 九宫格数独,(完整)九宫格数独题目大全,推荐文档
- 解决iPhone发送短信显示红色感叹号:尚未送达
- 基于Canvas+React的高性能Table表格
- ue4 无限地图_基于UE4的开放世界地图架构
- Python基础了解 python自带IDLE编译
- 科沃斯扫地机器人哪个型号最实用_科沃斯扫地机哪个型号好 三个价位三种选择...
- 自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、偏向所、轻量级锁、重量级锁、锁膨胀、对象锁和类锁
- 戏子推荐伤感个性日志:其实我很脆弱
- 用python画笛卡尔心形线_05.总是套路得人心,如何用数学+Python示爱!
- Android Studio中Cannot resolve symbol XXX的解决方法
- 知云文献翻译打不开_一款好用的文献英中翻译软件
- linux查看是centos几版本
热门文章
- linux让数值依次递增的快捷键,如何将文件名批量修改成上一级文件夹的名字。如:A(文件夹名)-01这样依次递增?...
- 打造高效的工作环境 – SHELL 篇
- 深入理解多线程(五)—— Java虚拟机的锁优化技术
- 深入理解JVM(5)——虚拟机类加载机制
- Java Servlet 技术简介
- Java内存访问重排序的研究
- 程序员面试题精选100题(46)-对称子字符串的最大长度[算法]
- Python爬虫入门(4):Urllib库的高级用法
- DHCP的基本介绍以及在HC3上配置DHCP中继和DHCP snooping
- 深入Java集合学习系列:ArrayList的实现原理