前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c# 实现p2p文件分享与传输系统

c# 实现p2p文件分享与传输系统

作者头像
hbstream
发布2018-05-11 11:43:16
1.5K0
发布2018-05-11 11:43:16
举报

c#实现P2P文件分享与传输系统 

一、模型

  P2P的概念大家都不陌生,也就是所谓的“点对点传输”,即不直接通过服务器,在两台或多台客户端之间传输数据,实现信息交流和资源共享。P2P技术已经发展了很多年了,虽然理论上已经发展了很多的模型,但在实际的网络环境中(尤其是镇里这种环境),究竟怎样的网络结构才具有较好的稳定性和较高的传输性能,还是有很大的争议,每家做P2P的网络公司都会有不同的见解。当前,P2P技术应用的主要目的还是减轻服务器工作压力,本人不才,之前曾在国内某网络软件公司里担任p2p相关的流媒体项目开发,对于P2P技术所创造的能力和带来的价值深有体会,也曾被它的复杂性所折磨的痛苦不已,不过,这也是我所珍惜的一笔宝贵的知识财富。

  似乎扯远了。。。赶紧回来,前段时间做了一个c#实现p2p文件传输系统的项目。以前都是用c/c++,这还是第一次用c#来做这种项目,由于用c++比用c#要早的多,所以写c#程序不免会带些c++的习惯,不过不影响程序整体。第一步:设计。对于“文件分享和传输”这种典型的p2p应用,可以使用成熟的模型和框架:

  上面这个图里面有几个固定的端点:Peer、Tracker Server、NAT Server和Source Server,还有两个游离的元素:数据和下载节点,它们构成了一个完整的p2p网络。在这个网络中,它们各司其职,维系着网络的运转。

  • Peer 整个系统的核心所在,主要负责资源提供和资源索取,驱动着网络的运行。也只有Peer,是唯一的一个必须存在的元素。
  • Tracker Server 如其名所述,动态、实时地监视着整个网络中peer节点的状态和资源分布,向下载节点提供p2p资源查询的重要功能,通过tracker server,下载节点可以迅速而准确的获取网络中拥有资源的节点列表,展开p2p下载。
  • NAT Server 负责NAT穿透,也形象的称为“打洞”。对于藏在受限型NAT网络后面的节点,不通过NAT Server做穿透的话,是无法和NAT后面的节点进行通信的,而目前大部分人是没有公网IP的,NAT Server对于组建p2p网络十分的重要。对于NAT穿透,我会在后面的文章中解释。
  • Source Server 负责资源提供或资源发布,一般网络公司建立的p2p网络,会有这种服务器来发布需要推广和扩散的资源。

  这个模型基本涵盖了p2p网络架构的主要几个部分,在具体实施的时候会根据不同的资源类型有不同的变化,通常会更加的复杂,当然,也有可能更简单。比如,DHT(Distributed Hash Table) 网络,这种网络,以不需要服务器的参与来完成p2p的查询与传输为主要特点,例如大家常用的eMule中的KAD网络,就是一种DHT网络。但其实,DHT中,是peer节点,负责了Tracker Server和Source Server的工作。也就是peer变得比较复杂,如果把它拆开来看,也基本就是这个模型。Peer的复杂化,可以降低服务器运行压力,但就牺牲了实时性,对于实时性和准确性要求高的应用,例如流媒体,不太适合DHT,当然,这并不妨碍DHT作为辅助手段来探知更多的资源节点。

  我要做的这个“EasyP2P”文件分享与传输系统,目前暂时不需要Source Server,由Peer负责Source Server的功能,也就是资源的发布;Tracker Server负责节点和资源的查询;NAT Server依然负责打洞。于是,变化成如下结构:

  这就是EasyP2P系统的模型,接下来,将根据这个模型,来具体设计整个网络的架构和运行流程。

文章版权haibindev,转载请注明作者和出处,谢谢合作~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-06-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • c#实现P2P文件分享与传输系统 
  • 一、模型
相关产品与服务
弹性公网 IP
弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档