㈠ 如何使用java实现tcp的p2p的打洞技术
建立穿越NAT设备的p2p的TCP连接只比UDP复杂一点点,TCP协议的"打洞"从协议层来看是与UDP的"打洞"过程非常相似的。尽管如此,基于TCP协议的打洞至今为止还没有被很好的理解,这也造成了对其提供支持的NAT设备不是很多。在NAT设备支持的前提下,基于TCP的"打洞"技术实际上与基于UDP的"打洞"技术一样快捷、可靠。实际上,只要NAT设备支持的话,基于TCP的p2p技术的健壮性将比基于UDP的技术的更强一些,因为TCP协议的状态机给出了一种标准的方法来精确的获取某个TCP session的生命期,而UDP协议则无法做到这一点。
一. 套接字和TCP端口的重用
实现基于TCP协议的p2p"打洞"过程中,最主要的问题不是来自于TCP协议,而是来自于来自于应用程序的API接口。这是由于标准的伯克利(Berkeley)套接字的API是围绕着构建客户端/服务器程序而设计的,API允许TCP流套接字通过调用connect()函数来建立向外的连接,或者通过listen()和accept函数接受来自外部的连接,但是,API不提供类似UDP那样的,同一个端口既可以向外连接,又能够接受来自外部的连接。而且更糟的是,TCP的套接字通常仅允许建立1对1的响应,即应用程序在将一个套接字绑定到本地的一个端口以后,任何试图将第二个套接字绑定到该端口的操作都会失败。
为了让TCP"打洞"能够顺利工作,我们需要使用一个本地的TCP端口来监听来自外部的TCP连接,同时建立多个向外的TCP连接。幸运的是,所有的主流操作系统都能够支持特殊的TCP套接字参数,通常叫做"SO_REUSEADDR",该参数允许应用程序将多个套接字绑定到本地的一个endpoint(只要所有要绑定的套接字都设置了SO_REUSEADDR参数即可)。BSD系统引入了SO_REUSEPORT参数,该参数用于区分端口重用还是地址重用,在这样的系统里面,上述所有的参数必须都设置才行。
㈡ 初学JAVA的问题
《java2 核心技术》卷 I,II, 卷I是基础部分(包括java 基本语法,面向对象,IO流与文件,图形界面,applet, 异常处理,范型设计),卷II是高级部分(多线程,集合,网络,JDBC,分布式对象,高级图形特性,JavaBean,安全,XML。。。)高手们说看完这两本书,就可以看《Thinking in java》了,之后就可以去学J2EE了
PS: 其实学完基本语法,I/O,异常,集合,JDBC(当然也要看看数据库Oracle 或MySql, Sql server之类的)后就可以开始学J2EE了:JSP ,servlet, JavaScript(跟JAVA没关系的一种脚本语言,用于B/S架构网络前台处理数据),structs 等。。。对于JFC中的SWING图形编程,如果觉得麻烦就跳过吧,毕竟桌面级开发不是JAVA的强项,非常麻烦。。。(写一个什么都没有的对话框就占去了14M内存,那还有啥好说的。。。)
另外,《JAVA编程思想》(《Thinking in JAVA》的中文翻译版)建议在看完核心技术I以后再看,对初学者而言,《JAVA编程思想》并不见得是本好书,但是对于有一定JAVA基础的人来说,这本书就是一本好书
还有就是多练习,初学者建议使用记事本编辑程序,在控制台下使用javac编译程序, java运行程序(这对你理解环境变量有帮助),之后你可以使用eclipse进行JAVA编程,需要说一点的是eclipse非常方便,它的快捷键堪称一绝,不过对初学者不好,会惯坏你的,学完面向对象特性以后再使用(常用快捷键alt + /)。
书上的代码很多,最好都敲一遍,对着书理解,其实你会发现,JAVA并不难(仅限与J2SE,因为本人刚开始学J2EE,还不是很了解J2EE。。。)
㈢ 如何使用java实现tcp的p2p的打洞技术
公网设服务器S, 2p点(P1.P2) 连S,过S双方获取对方公网IP.
P1 P2都向对方的(公网IP+任意端口)发起连接,当然无任何回应,但是会发生2件事
1 P1 P2都在自己的外网NAT上打了个连接对方的洞,这个洞会保持一会儿.
2 连接的时候S抓取到P1 P2 的NAT端口,然后将此端口发送给对方,
然后就可以想办法连接了.
㈣ java能不能实现P2P下载平台
可以的,看这个文章:
http://bbs.itren.cn/html/bbs8593.html
还有这个:
http://jwebee.javaeye.com/blog/157048
㈤ Java Socket 实现P2P
主动发起的会话的可以看成Client用socket、、被动接受的看成Server用ServerSocket、、、按你的做法、绝斗、A既有socket还有ServerSocket、、、socket用来主动连接其他客户端、、、ServerSocket用于虚宏亮监听其他客户端是否发来连接请求差宽
㈥ JAVA版p2p网贷系统源码哪家比较好
对比过,觉得迪蒙网贷系铅信腊统还不错,提供JAVA源码。
主要开发工具:
Eclipse:坦轿开源、功能强大、使用广泛、插件多,易用槐滑。
IntelliJ:号称最智能的Java开发工具,不开源,要花钱买License,不过有破解版。
然后迪蒙网贷系统java版的优势也多:
1、Java通过JDBC来访问数据库,接口比较统一。
2、java跨平台性比较好;
3、开发成本方面相对低;
4、代码安全等等。
㈦ 广域网实现p2p文件传输 如何实现nat穿透 求java或C++源代码
假设有两台分别处于各自的私有网络中的主机:A和B;N1和N2是两个NAT设备;S是一个使用了一个众所周知的、从全球任何地方都能访问得到的IP地址的公共服务器
步骤一:A和B分别和S建立UDP连接;NAT设备N1和N2创建UDP转换状态并分配临时的外部端口号
步骤二:S将这些端口号传回A和B
步骤三:A和B通过转换好的端口直接联系到对方的NAT设备;NAT设备则利用先前创建的转换状态将分组发往A和B
源码已发送请查收