JRMP 连接建立错误

2022-09-04 04:36:08

我得到以下异常跟踪:

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)

我阅读了一些关于此的论坛,但没有弄清楚此异常的根本原因。这是由于以下原因之一造成的吗?

  1. 内存不足。
  2. RMI 调用由于对服务器的请求数量增加而失败,导致其中一个请求等待并导致此请求处理超时。
  3. 不兼容的 jre 版本或与 JRE 版本相关的任何内容。
  4. 任何与网络相关的问题。
  5. 防火墙相关。

答案 1
  1. 内存不足。

不在客户端。可能在服务器上,例如,如果它导致分配线程失败。

  1. RMI 调用由于对服务器的请求数量增加而失败,导致其中一个请求等待并导致此请求处理超时。

哈哈该错误发生在连接建立阶段,远在调用服务器端方法实现之前。

  1. 不兼容的 jre 版本或与 JRE 版本相关的任何内容。

哈哈

  1. 任何与网络相关的问题。

是的。

  1. 防火墙相关。

哈哈这将导致连接超时,或者在某些过时的情况下会导致连接拒绝,而不是读取超时。


答案 2

我在客户端有同样的错误。服务器是可访问的,我可以通过telnet打开端口。当我在客户端和服务器端使用Wireshark观看它时,我看到以下内容:

  • TCP 连接已建立

    • SYN
    • SYN, ACK
    • ACK
  • 客户端发送:JRMI, Version 2, Stream Protocol

  • 服务器回复: - 但此包从未到达客户端JRMI, ProtocolAck

在我的情况下,它是从MagicDraw客户端到许可证服务器的连接。对于其他位置的其他 colleage,使用代理很有帮助:客户端通过 HTTP 进行通信。因此,也许这可以帮助您省略此问题。https://docs.oracle.com/javase/7/docs/platform/rmi/spec/rmi-arch6.htmlhttp.proxyHost=xxxx -Dhttp.proxyPort=8080

我不能具体说明,因为我无法访问Magic Draw的源代码。


推荐