java代码题 穿过隧道_使用隧道的Java RMI - 一个例外

当我们完成调试步骤时,这个问题变得很长。我将把这些留给那些有问题的未来用户,但是这里有一个简短的版本:

简短版

使用putty,而不是使用" Dynamic"这意味着它使用SOCKS,你应该使用" local"连接到SSH服务器。

更改此项修复了以下异常:

java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:

java.io.EOFException

at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)

at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)

at sun.rmi.server.UnicastRef.newCall(Unknown Source)

at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)

at java.rmi.Naming.lookup(Unknown Source)

at TMAClient.main(Client.java:22)

Caused by: java.io.EOFException

第二个问题是对象没有使用正确的端口进行导出。这需要更改为在扩展UnicastRemoteObject的对象的构造函数中使用super(1099)。

长版

我似乎非常接近通过使用SSH隧道和RMI让我的客户端与我的服务器通话,但我得到一个例外,我不知道为什么。

服务器和客户端都使用JRE 8,并且有一个security.policy,它授予所有权限(暂时)。我在同一台机器上运行时测试了服务器和客户端,这是有效的。但是,我现在正在尝试使用SSH tunel解决防火墙问题。

在运行服务器的VM上,安装FreeSSHd并允许端口转发。在有客户端的机器上,我使用以下设置设置了putty:

主机:

端口:23(这在路由器上正确设置为端口转发等)。

连接/ SSH /隧道:

源端口:1099

目的港:1099

动态

自动

当我在客户端调用Naming.lookup()方法时,我得到了这个异常:

java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:

java.io.EOFException

at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)

at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)

at sun.rmi.server.UnicastRef.newCall(Unknown Source)

at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)

at java.rmi.Naming.lookup(Unknown Source)

at TMAClient.main(Client.java:22)

Caused by: java.io.EOFException

at java.io.DataInputStream.readByte(Unknown Source)

... 6 more

HelloClient exception: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:

java.io.EOFException

客户端上的代码如下:

System.setSecurityManager(new RMISecurityManager());

Naming.lookup("rmi://localhost/" + AUTH_OBJECT_BINDING);

我认为这可能是因为putty设置中的一些错误,但我在诊断导致这种情况的原因时遇到了问题。我还尝试使用源端口1098和目标1099,并将客户端更改为使用localhost:1098,但这没有用。

我知道如果我将命名查找中的端口更改为1099或1098以外的其他内容(具体取决于putty的设置方式),我会收到连接拒绝异常。这表明它正在连接,但出现了问题。

非常感谢任何帮助。

在EJP建议的评论中添加VM参数后,我在启动时会看到这一点,但我还不确定这是否重要:

Jul 10, 2014 9:07:42 AM sun.rmi.server.UnicastServerRef logCall

FINER: RMI TCP Connection(1)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: void rebind(java.lang.String, java.rmi.Remote)]

Jul 10, 2014 9:07:42 AM sun.rmi.server.UnicastServerRef logCall

FINER: RMI TCP Connection(2)-127.0.0.1: [127.0.0.1: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)

368da795dfc1cd54e6306b021abdd37e.png

e5ae02e8ae22b867019d93ac94344541.png

LJGUa.png

注意 - 我已尝试使用和不使用forward / bind进行本地主机设置。

198bde9556430d8e53b39164989c7484.png

77Q3X.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值