2009-09-09 73 views
2

我正在A类网络中的一堆节点上运行应用程序,但只能从我自己的系统访问它们,如果我登录到该网络中唯一的节点也有一个B类地址。但是,客户端部分(包括GUI和所有内容)只能在我的系统上运行,所以我需要一些与A类网络进行通信的方式。客户端(我的系统)尝试设置一个简单的TCP套接字到服务器(位于内部网络的边缘,带有一个ServerSocket),但得到一个连接超时异常。由于只有SSH端口22是开放的,有人建议我使用SSH隧道将数据包从我的系统发送到内部网络。使用SSH隧道运行Java应用程序的两个节点之间的通信

经过一番Google搜索后,我发现以下内容允许您设置SSH隧道,但是如何从Java内部使用它来设置套接字以及哪些不是?谢谢!

ssh -L 2222:10.10.10.10:22 174.174.174.174 

编辑: 我使用JSch从我的系统设置端口转发到内部节点,但有什么办法可以让它双向的,而不必设立一个单独的隧道在每个内部节点? (这些节点没有使用相同的TCP连接进行响应,但已经建立了与我的笔记本电脑端口2222的新连接。)

回答

0

如果您要求以编程方式设置转发的端口,请使用JSch which supports port forwarding

+0

是的,那正是我需要做的。我已经提出了我试图建立连接的代码摘录,但到目前为止,我仍然遇到Connection Timed Out异常。 – thodinc 2009-09-10 10:29:34

2

SSL隧道与其他套接字一样工作,您只需连接到本地套接字即可。在你的情况下,它是,

Socket socket = new Socket("localhost", 2222); 
OutputStream out = socket.getOutputStream(); 

隧道实际上将连接到10.10.10.10:22。

+0

我相信你的意思是“SSH”,而不是“SSL”;-)。 – 2009-09-09 21:36:24

+0

@MattSolnit,ZZCoder表示SSL。这是一个SSL隧道。 – logoff 2012-07-09 08:10:33