有没有办法在不同网络上通过双向连接连接两台计算机(一台具有端口转发)
Posted
技术标签:
【中文标题】有没有办法在不同网络上通过双向连接连接两台计算机(一台具有端口转发)【英文标题】:Is there a way to connect two computers with a two-way connection on different networks (one has port forwarding) 【发布时间】:2020-05-26 06:38:19 【问题描述】:我正在尝试通过两个不同的网络制作双向即时消息应用程序。其中一个网络是我的,它启用了端口转发(将某个端口上的流量发送到特定的 IP 地址)。我的问题是我需要一个双向连接(套接字只能发送到 serverSockets,serverSockets 不能发送到套接字)。有没有办法通过预先存在的连接连接到计算机?有这方面的图书馆吗? IE。 socket.connect(serverSocket.getConnection, 5001);
(我已经创建了自己的类来处理所有的输入/输出流和套接字,我只需要一个库来存放我可以放入类中的函数)。
【问题讨论】:
“其中一个是我的,启用了端口转发”的声明不清楚。您的意思是您的防火墙配置为将传入流量转发到您计算机的特定端口?那样的话,对方电脑可以建立TCP连接,你的电脑可以和对方收发消息对吧?你能澄清一下这个安排中缺少什么吗? 所以,我通过使用客户端和服务器的输入和输出流来解决我的问题。现在我可以通过两种方式发送信息,这最终是我问题的根源。 【参考方案1】:如果您的要求是让一台暴露在互联网上的计算机直接连接到 NAT 后面的计算机,如果您能够实现类似于 reverse ssh tunneling
的东西,您的应用程序可能会正常工作。 See here 和这里,java library。
但我会为此推荐某种客户端-服务器方法,其中每个人都连接到服务器,并通过服务器相互连接。
【讨论】:
@anyGenericProgrammer:你真的要在别人的拼写上吹毛求疵吗? 你在服务器端做reverse ssh tunneling
对吗?
服务器是指公网IP的电脑吗?在这种情况下,答案是否定的。您不需要反向 ssh 来访问具有公共 IP 的计算机,对吗?您需要一种方法来达到没有的方法。所以你在没有公网IP的电脑上开始连接(打开方式),然后一旦与另一台电脑(“服务器”)建立连接,你可以反向打开另一个连接(公共IP电脑控制 NAT 计算机)。请参阅本教程以获得更好的解释:howtogeek.com/428413/…
@Sir Beethoven,有没有办法使用常规的非加密套接字来做到这一点?(是的,服务器对互联网开放)
我不确定你应该如何实现它,我宁愿指出一个已知的“架构”来实现相同的目标。我想你应该对 Java 的网络连接做更多的研究。如需深入了解,请查看this other thread以上是关于有没有办法在不同网络上通过双向连接连接两台计算机(一台具有端口转发)的主要内容,如果未能解决你的问题,请参考以下文章