当前位置:首页 > 日记 > 正文

开发一个使用C#简单的P2P应用

开发一个使用C#简单的P2P应用
虽然有很多P2P网络不需要索引或中央,每个客户端之间可以直接相互通信,但下面的图1显示了P2P网络的基本工作原理,在一般情况下,一个中央的索引包含P2P的概念,它不存储任何文件,它只存储所有用户登录这个网络上的信息,对客户端和共享文件的用户的IP地址,客户端通过日常通信链路的简单命令的使用。

当客户机想在P2P网络上找到其他客户端共享的文件时,系统执行以下操作:

客户机用自己的用户名登录到索引。

客户机A希望注册他们想与其他用户共享的文件,以便其他用户能够找到文件。

客户机A发送应用程序查找与某个输入模式匹配的文件。

索引在其中搜索给定的文件名,并将下列结果返回给客户机a:

提供文件的客户端,如客户端B。

用户的IP地址。

它搜索的文件名。

一旦客户机A选择下载选项,客户机A使用搜索返回的IP地址来建立与客户B的连接。

一旦成功建立连接,就可以通知对方开始发送文件。

下载完成后,您应该将共享文件的副本注册到索引中。

这样的P2P网络可以用来共享任何类型的文件,这些文件可以在局域网或因特网上使用。
C #语言是开发P2P应用程序很容易因为其良好的网络功能的支持,尤其是两类支持TCPListener和TCPClient内部。以下是C #开发P2P应用的一个例子:

公共mytcplistener(端口):基地(港口)
{

}
公共无效StopMe()
{
如果(this.server!= null)
{
This.Server.Close();
}
}
}

转移公共类
{
MyTcpListener TCPL;

公共调动()
{
optionsloader OL =新OptionsLoader();
int端口= 8081;
如果(ol.port > 0)
{
端口;
}
其他的
{
端口= 8081;
}

this.tcpl =新mytcplistener(港);
}

公共无效transfershutdown()
{
Tcpl.StopMe();
}

公共无效listenforpeers()
{
尝试
{

编码ASCII = encoding.ascii;
()开始横向预置压应力;
虽然(真实)
{
在连接阻塞前,请接受
插座的tcpl.acceptsocket();
网络流数据流=新的网络流(S);

字符串的文件名;
字节{缓冲区=新的字节{ 256 };
数据流读取(缓冲,0, 256);
文件名= encoding.ascii.getstring(缓冲区);
StringBuilder sbfilename =新StringBuilder(文件名);
StringBuilder sbfilename2 = sbfilename。取代(
FileStream FS =新的FILESTREAM(sbfilename2.tostring(),我不知道。打开,读);
BinaryReader读者=新BinaryReader(FS);
字节{ }字节=新字节{ 1024 };
在读;
当((读=读,字节,0,字节长度))!= 0)
{
数据流。写(字节、0、阅读);
}
读者:关闭();
同花顺()数据流;
数据流结束();
}
}
赶上(线程前)
{
MessageBox显示(ex.tostring());
}
}

公共无效DownloadToClient(字符串服务器,远程文件名字符串,字符串保存本地的文件名)
{
尝试
{
TcpClient TCPC =新的TcpClient();
字节{读取=新字节{ 1024 };

optionsloader OL =新OptionsLoader();
int端口= 0;
如果(ol.port > 0)
{
端口;
}
其他的
{
默认端口号端口号,可以设置为使用
端口= 8081;
}
尝试连接/
IPHostEntry IPHost = DNS解决(服务器);
字符串{ } = ipHost别名别名;
IP地址= iphost.addresslist { };

IPEndPoint EP =新的IPEndPoint(addr { 0 },端口);
Tcpc。连接(EP);

获取流对象
流的= tcpc.getstream();
字节{ } b = encoding.ascii.getbytes(remotefilename.tochararray());
S.写的(B,0,b.length);
int的字节;
FileStream FS =新的FILESTREAM(保存本地的文件名,我不。openorcreate);
BinaryWriter W =新BinaryWriter(FS);

读取流对象,并转换为ASCII代码。
同时((字节= s读(读,0,读,长度))!= 0)
{
w写(读,0,字节);
读取=新字节{ 1024 };
}

TCPC密切();
W. Close();
关闭();
}
catch(异常前)
{
抛出异常(ex.tostring());
}
}
}
}

相关文章

腾讯推出QQ快递和快递业

腾讯推出QQ快递和快递业

推出,腾讯,快递,电脑软件,QQ,3月19日,腾讯在3月1日推出了新版QQ,在新的QQ应用程序管理器中添加了QQ Express应用程序。QQ用户可以通过物流公司独家渠道查询快递信息。 亿邦动力网测试QQ速递应用,发现目前QQ速递支持派两功能调查。在检查功能,Q…

穿过3.3.5!LichKing的最后战役

穿过3.3.5!LichKing的最后战役

战役,电脑软件,LichKing,在2011,它开始了超过半个月,主要的网络游戏频繁启动。的第一件事就是DNF的亮相,超级攻击性网络游戏。然后,到了巫妖王的秋季版的在线版本。或许是因为全球灾难的压力,网易经营从1月20日的魔兽世界3.2.2版本直接到3.3.5版…

SessionID

SessionID

电脑软件,SessionID,SessionID属性返回用户的会话标识。创建会话时,服务器为每个会话生成一个单独的身份。会话身份返回一个长整形数据类型。 语法 session.sessionid 笔记 不要创建SessionID属性与数据库应用的关键。这是因为,如果Web服务…

谷歌将使用majel对抗苹果Siri的第

谷歌将使用majel对抗苹果Siri的第

末尾,电脑软件,谷歌将,majel,Siri,在科幻电影星际迷航的电脑,谷歌的语音助手,Majel的名字; 北京时间12月14日,知情人士称,谷歌正在开发的代码majel语音应用,它类似于苹果iPhone的语音助手西丽。它将在年初发布。 Majel这个名字来自巴雷特罗顿贝…

@指令参考

@指令参考

参考,指令,电脑软件,你可以在你的脚本中使用@指令发送的信息如何处理。ASP文件IIS。例如,下面的脚本设置脚本语言VBscript语言处理指令的@。 昏暗的myVar 应用(myvar)=这是我的功 写(myVar)反应。 %> 在IIS 4中,Active Server页面(ASP)支持以下五个@指…

谷歌暂时关闭音乐搜索,或在5月推出

谷歌暂时关闭音乐搜索,或在5月推出

音乐,搜索,推出,服务,电脑软件,据国外媒体报道,谷歌今天突然关闭了音乐搜索登陆页面,或者因为谷歌可能会在五月O O O O开发者大会上推出谷歌音乐服务。 谷歌音乐搜索服务会议门票 2009年10月,谷歌与运营商的合作举行了一个音乐搜索服务会议在…

假期旅行计划,Windows8旅游帮助你浏

假期旅行计划,Windows8旅游帮助你浏

浏览,计划,假期,旅行,帮助你,假期旅行计划,Windows8旅游帮助你浏览世界 虽然在2013大部分的假期相媲美的Keng dad,似乎有些人爱它是硬的,和那些玩智能推荐几个实用工具的Windows8用户。 1。旅游 这是官方的兵将是旅游业中的应用,通过提供的精…

Windows7完全卸载IE浏览器8

Windows7完全卸载IE浏览器8

浏览器,卸载,电脑软件,据国外媒体报道,Windows 7测试人员在最新版本7048中发现了一个有趣的变化。Internet Explorer 8已在Windows功能选项中完全删除,但它也会影响系统浏览器的使用。 以下是图形步骤: 从控制面板(控制面板)打开所有控制面板选…

改变世界的音乐商店:苹果iTunes编年

改变世界的音乐商店:苹果iTunes编年

音乐,商店,编年史,世界,电脑软件,介绍:自2001年1月9日以来,苹果已经发布1 iTunes在macworldexpo会议,和音乐商店已经走过了12年。今天,iTunes不仅是iOS用户不可或缺的媒体平台,而且有助于数字音乐产业的发展作为一个整体。 在iTunes的十二岁生…

2010春节前的一件喜事

2010春节前的一件喜事

喜事,春节,电脑软件,你在2110年1月到2月14日(春节)前过得愉快吗 2010一月是个幸运的日子。 2010 01月03日星期日十九十一月春节期间,农历新年红月癸丑羊 2010、01、星期二、05、3月21日、十一月、元旦、月、日、日、年、红、鸡 2010星期三…

中秋老照片展,几十年前的中秋节!

中秋老照片展,几十年前的中秋节!

中秋节,老照片,中秋,年前,电脑软件,你知道十二年前的中秋节是什么样子吗内关带来的15张老照片给你。介绍了上个世纪60年代至90年代的人们中秋节的情况。每一个节日都是一种祝福。 顺便说一下,QQ中秋节的表达方式! 授权方式:免费软件大小:1.3m语…

武警8741部队介绍

武警8741部队介绍

武警,部队,电脑软件,武警8741部队介绍: 人道主义者John Holmes说这笔钱将在6个月内用于帮助300万个人。 与此同时,国务卿希拉里说她的国家将于星期六前往海地。 地震造成多达五至十万人死亡,武装警察8741名士兵介绍救援人员继续寻找幸存者…