原文地址: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网络模型(一)--聊天相关推荐

  1. 【flex chat】 p2p视频语音聊天室 欢迎你的测试

    [flex chat] p2p视频语音聊天室 欢迎你的测试, 花了我2个星期的时间,相对来说比较完善了,用的是Adobe提供的P2P服务器.后期有时间可以继续开发,以现有的功能可以实现视频会议.视频客 ...

  2. C# P2P实现点对点聊天

    P2P,英文Peer-to-Peer的缩写,中译为对等互联或点对点技术.P2P技术可以让用户可以直接连接到其他用户的计算机,进行文件共享与交换,同时P2P在深度搜索.分布计算.协同工作等方面也大有用途 ...

  3. C/S+P2P网络模型(二)--上传下载文件

    原文地址:http://blog.csdn.net/whoami021/article/details/21656875 上一篇文章我们实现聊天的功能,下面我们看文件传输怎么实现. 我的做法是:增加一 ...

  4. Flash P2P 语音视频聊天示例

    1. 前提         1.1需要ADOBE官网上的例子          http://labs.adobe.com/technologies/stratus/samples/#resource ...

  5. P2P网络——网络模型概述

    P2P网络模型 一.常见网络模型     1.随机网络:随机网络的研究是基于随机图理论的.     2.规则网络:常见的规则网络有最近邻耦合网络和星形耦合网络.     3.小世界网络      二. ...

  6. Peer to Peer ( P2P ) 综述

    1 绪言 1.1 Peer-To-Peer 介绍 最近几年,对等计算( Peer-to-Peer,简称P2P) 迅速成为计算机界关注的热门话题之一,财富杂志更将P2P列为影响Internet未来的四项 ...

  7. 基于Sip的P2P设计和原理分析

    基于Sip的P2P设计和原理分析 1.            SIP网络 2.            P2P技术在互联网上的应用 3.            P2P网络架构 3.1.    集中目录式 ...

  8. 再谈P2P技术:网络拓扑结构、核心技术分析

    随着P2P应用的蓬勃发展,作为P2P应用中核心问题的发现技术除了遵循技术本身的逻辑以外,也受到某些技术的发展趋势.需求趋势的深刻影响. P2P协议概述 P2P打破了传统的Client/Server ( ...

  9. 【zz】P2P技术简介—by红瞳

    P2P技术简介-by红瞳 转载自:http://darken99.spaces.live.com/blog/cns!6b19436cd6f6de66!148.entry 点对点技术与点对点协议的区别 ...

最新文章

  1. Index of Spring
  2. python web开发-flask访问请求数据request
  3. 【C++的深度剖析教程21】类型转换函数下
  4. Python与机器视觉(二)读入图片并显示
  5. 关键字:auto、static、register、const、volatile 、extern 总结
  6. Python内置函数之-struct
  7. 仿斗鱼、美团、网易邮箱等 弹窗效果
  8. 大数据集群安装02之Hadoop配置
  9. java 九宫格数独,(完整)九宫格数独题目大全,推荐文档
  10. 解决iPhone发送短信显示红色感叹号:尚未送达
  11. 基于Canvas+React的高性能Table表格
  12. ue4 无限地图_基于UE4的开放世界地图架构
  13. Python基础了解 python自带IDLE编译
  14. 科沃斯扫地机器人哪个型号最实用_科沃斯扫地机哪个型号好 三个价位三种选择...
  15. 自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、偏向所、轻量级锁、重量级锁、锁膨胀、对象锁和类锁
  16. 戏子推荐伤感个性日志:其实我很脆弱
  17. 用python画笛卡尔心形线_05.总是套路得人心,如何用数学+Python示爱!
  18. Android Studio中Cannot resolve symbol XXX的解决方法
  19. 知云文献翻译打不开_一款好用的文献英中翻译软件
  20. linux查看是centos几版本

热门文章

  1. linux让数值依次递增的快捷键,如何将文件名批量修改成上一级文件夹的名字。如:A(文件夹名)-01这样依次递增?...
  2. 打造高效的工作环境 – SHELL 篇
  3. 深入理解多线程(五)—— Java虚拟机的锁优化技术
  4. 深入理解JVM(5)——虚拟机类加载机制
  5. Java Servlet 技术简介
  6. Java内存访问重排序的研究
  7. 程序员面试题精选100题(46)-对称子字符串的最大长度[算法]
  8. Python爬虫入门(4):Urllib库的高级用法
  9. DHCP的基本介绍以及在HC3上配置DHCP中继和DHCP snooping
  10. 深入Java集合学习系列:ArrayList的实现原理