Java、点对点传输实现、盗墓者是个丑奴儿

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Java_Dmz/article/details/82226389

p2p点对点传输,需要解决的问题:

1、当客户端连接服务器,提拔为独立IP+映射端口。

2、拿到IP+端口给它发送信息,会被拦截,只有请求的服务器才能回消息,逻辑上会回到本地,拦截是出于安全考虑。

3、p2p传输,需要解决的就是这个问题。如何让其他计算机与这个计算机通信?

出现的问题、图示:

如果让右边的客户与左边的客户建立通信了,那么就可以让左边的客户,与更多的客户建立连接。

如何打洞?

发个数据包,被对方拦截,但自己网关会记录对方IP+端口,对方通过IP+端口可以给我们发消息,当对方一发,我们就收到消息。消息一通,两个处于内网的计算机,就能够使用记录的IP+端口进行直接通信。

研究了一下午,资料语义不详、缺斤短两,浪费时间。解决过程:

步骤1、让客户都上池子,得到独立IP+映射端口:

步骤二、服务器将客户池中的IP都传给客户(是客户自己过滤):

客户端会收到除了自己以外,所有与服务器连接的计算机的、IP与端口

步骤三、完成点对点传输,也就是打洞:

开启线程,在线程中去打洞,不要影响本身的程序与服务器信息交互。

如果影响到了本身程序,是没有意义的。主线程保持心跳包交互,子线程打洞

在程序中,得到对方的IP+端口,自己给这个IP+端口发送数据包。

1、毋庸置疑会被对方拒绝数据包

2、自己发的包被对方拦截,但自己网关会记录对方的IP+端口。

3、网关记录了对方IP+端口什么用呢?对方的以记录的IP+端口就能给我发消息了。

4、对方的IP+端口在给我们发,我们就能收到消息了。对方发通了,我们就可以建立通信了。

5、处于内网的计算机,是通过记录双方的IP+端口进行通信。过程中需要保持IP+端口不变

实验结果:

程序一、拿到的对方地址、182.139.31.125:7717

程序二、拿到的对方地址、182.139.31.125:7708

两个处于同一个计算机的不同程序,自己的IP+端口与另一个不一样,各自都获得的对方的外网IP+端口,通过外网IP+端口建立了连接通讯。

没有经过服务器中转消息,做到了点对点。知道此技术如何打洞,自己的数据不被别人拦截即可了。

想要多点件传输,就是客户连接多个客户后、处理文件数据合并上比较麻烦。此技术也没特大用。知道就OK

猜你喜欢

转载自blog.csdn.net/Java_Dmz/article/details/82226389