最近由于工作需要,要用到p2p方面的知识,本人没接触过这方面,希望得到大家的指点和帮助
1、怎么学?
2、买什么书籍比较好?
3、有没有推荐的网址?
4、有没有比较快速的入门等?
1、怎么学?
2、买什么书籍比较好?
3、有没有推荐的网址?
4、有没有比较快速的入门等?
解决方案 »
- 请大侠们帮忙!! 如何只查找指定的显示窗口而一旦把对话框隐藏后就找不到了??
- 窗口关闭了, 程序却没有退出
- 哪位给解释一下观察平面法向量、观察Zv轴正方向、观察平面方向、观察方向这些概念啊
- VC下用什么函数设置EXCEL的打印区域
- 如何判断程序是用户通过双击文档来打开程序还是直接双击exe来打开程序的?
- 怎么在两个对话框之间传递变量?
- VC中表格怎样制作?
- 如何在工程中应用自己的控件
- 程序运行时自动打开一个指定的文件
- 我要让Wnd在Splash封面后显示, ::Sleep(ntimes)该放在何处
- CFileDialog 类多选文件,路径显示不正确
- vs2010里的虚拟目录,也就是.vcxproj.filters没有生效
http://book.jd.com/10080551.html
2、 A和B分别与S的【主连接】保持联系。
3、 当A需要和B建立直接的TCP连接时,首先连接S的【协助打洞】端口,并发送协助连接申请。同时在该端口号上启动侦听。注意由于要在相同的网络终端上绑定到不同的套接字上,所以必须为这些套接字设置 SO_REUSEADDR 属性(即允许重用),否则侦听会失败。
4、 S的【协助打洞】连接收到A的申请后通过【主连接】通知B,并将A经过NAT-A转换后的公网IP地址和端口等信息告诉B。
5、 B收到S的连接通知后首先与S的【协助打洞】端口连接,随便发送一些数据后立即断开,这样做的目的是让S能知道B经过NAT-B转换后的公网IP和端口号。
6、 B尝试与A的经过NAT-A转换后的公网IP地址和端口进行connect,根据不同的路由器会有不同的结果,有些路由器在这个操作就能建立连接,大多数路由器对于不请自到的SYN请求包直接丢弃而导致connect失败,但NAT-A会纪录此次连接的源地址和端口号,为接下来真正的连接做好了准备,这就是所谓的打洞,即B向A打了一个洞,下次A就能直接连接到B刚才使用的端口号了。
7、 客户端B打洞的同时在相同的端口上启动侦听。B在一切准备就绪以后通过与S的【主连接】回复消息“我已经准备好”,S在收到以后将B经过NAT-B转换后的公网IP和端口号告诉给A。
8、 A收到S回复的B的公网IP和端口号等信息以后,开始连接到B公网IP和端口号,由于在步骤6中B曾经尝试连接过A的公网IP地址和端口,NAT-A纪录了此次连接的信息,所以当A主动连接B时,NAT-B会认为是合法的SYN数据,并允许通过,从而直接的TCP连接建立起来了。
呵呵..基本差不多就这样子了 不过由于网络类似不同 可能P2P穿透的方式也不完全一样!如果主机都在NAT后面就是这样子操作了 但也存在着其他情况。。总之就要灵活一点了
参考网址:http://blog.oraycn.com/ESFramework_04.aspx 我现在也在就是参考这ESFramework对P2P技术进行学习,感觉学到了不少。有兴趣的朋友,我们一起研究下。