【问题标题】:RMI Client- Server: java.rmi.ConnectIOException: error during JRMP connection establishmentRMI 客户端-服务器:java.rmi.ConnectIOException:JRMP 连接建立期间出错
【发布时间】:2014-07-04 23:01:15
【问题描述】:

我正在尝试使用 TCP 打孔机制建立 RMI 客户端服务器连接,其中客户端和服务器位于不同的 NAT/防火墙后面。目前,我可以使用他们的公共 IP 和端口“80”获得客户端和服务器之间的连接。建立 TCP 连接后,我可以检索 RMIServer 的存根信息。另外,我可以 netstat 并查看已建立的连接。

但是当我尝试读取远程对象时,我遇到了异常

java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
java.net.SocketTimeoutException: Read timed out
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:293)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:190)

在使用 netstat 监控连接时,我可以看到 TCP 连接立即终止并且不稳定。 如果我能获得有关如何维护或获得稳定 TCP 连接的任何提示,将会很有帮助。

谢谢。

【问题讨论】:

  • 定义“尝试读取远程对象”。并提供堆栈跟踪的其余部分。

标签: java sockets tcp rmi


【解决方案1】:

超时错误表明您能够在客户端和服务器之间打开一个套接字,但是该套接字没有及时得到服务,因此它关闭并给了您该异常。

上次发生这种情况是因为客户端在其路径中找不到正确的类库。服务器试图打开一个套接字,客户端去寻找类库并没有找到它,套接字最终超时。

仔细检查客户端和服务器的类路径。

【讨论】:

  • 这里有客户端和服务器。客户端打开连接:服务器接受它们。客户端收到了读取超时,所以是服务器没有响应。
  • 我已经看到它发生在服务器试图发送到客户端并收到套接字错误的另一个 esy 中。服务器在套接字上侦听客户端请求,然后通常会产生一个专用线程来处理专用套接字上的客户端,同时释放众所周知的端口以接受更多客户端请求。无论如何,第一步是检查类路径。
  • 使用“80”端口建立TCP连接可以吗?我的客户端计算机在与服务器建立连接后立即获得“连接超时”。有什么方法可以保持 TCP 连接处于活动状态?我尝试使用 socket.setKeepAlive(true),但这似乎没有帮助。
  • 交叉检查了类路径。一切顺利。但仍然面临这个问题。
  • 看了一下——这似乎已经出现在 stackoverflow 上。 stackoverflow.com/questions/14332154/… 那里的答案好像是网络相关的问题。如果您尝试 ping 该 IP 地址和端口会发生什么?
猜你喜欢
  • 1970-01-01
  • 2021-11-06
  • 2012-04-24
  • 2011-05-20
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多