BlackFeather'S Blog 我的技术小博 -- C/C++,Python,Golang

分享一份很详细的P2P代码 - VC

 

前几天还有人在群里问p2p的东西,这个原理满网都是,但是示例就比较少,大多是开源的成品,代码阅读起来很纠结。今天翻硬盘看到一份很精简但是很清晰的代码,发出来共享。

保留作者信息:

//作者:shootingstars(zhouhuis22@sina.com)

 

/*  源码修改声明:

 *

 * 这个修改的代码是早期为了节省时间在原作者(shootingstars)的代码的基础上修

 *  改测试用的。原代码的版权归原作者所有。对于做的修改的部分本人不作任何担保,

 *  只是为了方便大家使用修改后的代码对于UDP穿透进行验证而已。

 *

 *  原作者的关于UDP穿透的简介是网上较早的一份对于UDP穿透内网的说明,但是并

 *  不是特别的清楚和详细。本人在从事P2P程序开发的过程中, 对于内网穿透做了很

 *  好的实现。由于经常有人问起这方面的问题,因此决定将自己对于使用UDP内网

 *  穿透的经验也写出来与大家分享, 希望对于从事这方面工作的朋友有所帮助.

 *  

 *  源码修改者简介:

 *  Hwycheng Leo, like C/C++/Python/Perl, hate Java. 

 *  一直使用C/C++语言从事网络服务器和客户端方面的开发工作。近两年来主攻P2P技术方向。

 *  开发了完全免费强大的BitTorrent下载软件 - FlashBT(变态快车). 近期在公司负责开发

 *  P2P + IM 的商业化平台。

 *  邮件/MSN: FlashBT@Hotmail.com           [欢迎热爱网络编程和P2P开发的来信交流]

 */

 

 

下面是一个模拟P2P聊天的过程的源代码,过程很简单,P2PServer运行在一个拥有公网IP的计算机上,P2PClient运行在两个不同的NAT后(注意,如果两个客户端运行在一个NAT后,本程序很可能不能运行正常,这取决于你的NAT是否支持loopback translation,详见http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt,当然,此问题可以通过双方先尝试连接对方的内网IP来解决,但是这个代码只是为了验证原理,并没有处理这些问题),后登录的计算机可以获得先登录计算机的用户名,后登录的计算机通过send username message的格式来发送消息。如果发送成功,说明你已取得了直接与对方连接的成功。

    程序现在支持三个命令:send , getu , exit

    

    send格式:send username message

    功能:发送信息给username

    

    getu格式:getu

    功能:获得当前服务器用户列表

    

    exit格式:exit

    功能:注销与服务器的连接(服务器不会自动监测客户是否吊线)

 

完整工程代码+文档打包下载:201305071124554175

 

2013年5月7日 | 发布:blackfeather | 分类:C/C++代码 | 评论:0

发表留言: