如何使用java实现tcp的p2p的打洞技术

2024-05-15

1. 如何使用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实现tcp的p2p的打洞技术

2. TCP怎么实现P2P打洞

一般局域网使用了NAT(网络地址转换技术)和防火墙。P2P穿越NAT和防火墙主要有两种技术:称为打洞的UDP Punch技术和利用NAT设备管理接口的UPnP技术。一般使用UDP Punch技术,它实现起来简单一点。TCP实现起来比较复杂。关于这两种技术实现细节你可以查找相关书籍进行深入了解。

3. Java Socket 实现P2P

主动发起的会话的可以看成Client用socket、、被动接受的看成Server用ServerSocket、、、按你的做法、、A既有socket还有ServerSocket、、、socket用来主动连接其他客户端、、、ServerSocket用于监听其他客户端是否发来连接请求

Java Socket 实现P2P

4. Java实现TCP穿透NAT技术该怎么实现

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。
javatcp穿透nat

5. 请教C# TCP 如何打洞实现P2P传输。

TCP是连接式传输,我们常用的HttpRequest就是TCP ,第一步是建立连接,然后传输数据,获取返回数据
 
建议用UDP来做,获取对方IP后,发送数据包,当对方接受到这个数据包后,会返回给你一个信息,在接到这个信息后,如果正确,就可以发送数据了,进行点对点的传输,但是容易丢包。。

请教C# TCP 如何打洞实现P2P传输。

6. java向个方向会用到socket网络编程,p2p等技术?

在网络这么发达的信息时代,JAVA在C/S,B/S都会用到网络编程C/S会用得多一点,就一点来讲C/S升级比较麻烦,所以单机的系统是比较少,一般都是在线升级B/S也会用到,特别是几个系统之间要交互(也就是要给其它系统发数据或者接收数据)的话,都会用到SOCKET
不过WEB工程里面  我还没见过需要通信利用SOCKET编程的,也许是我见识少,但是在WEB里面需要比如完成SOCKET实现的文件聊天等等 都是利用AJAX的框架实现的

7. 用Java写了个很简单的P2P聊天程序,但其中关于TCP\IP、UDP过程有些疑问。

局域网一般不会 丢包的..  要不你直接tcp发信息   
   怕丢包 一般都是 三次握手呗  学tcp协议的时候不是讲过的呗   
  http://baike.baidu.com/view/1003841.htm  看看呗

用Java写了个很简单的P2P聊天程序,但其中关于TCP\IP、UDP过程有些疑问。

8. WCF 能够P2P通讯 或者打洞吗

WCF可以实现大文件的上传和下载,这没有问题,但是做P2P不行,通讯机制完全不同。WCF其实就是Web服务的升级版,不支持P2P通讯,WCF的安全机制也不允许。