`
dingjob
  • 浏览: 183605 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

解决RMI服务在windows下正常调用,而在linux下异常问题

阅读更多
现象: 端口开了访问不到,报错日志如下:
引用
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused: connect

问题解决:
检查服务端线程信息
netstat -ao 查看线程信息如下:
引用
Proto Recv-Q Send-Q Local Address  Foreign Address   State         Timer
         tcp        0      0 *:10011       *:*           LISTEN      off (0.00/0/0)

从这里可以看到,服务已经启动,但是没有客户端连接
Timer 这项的含义如下:
Timer state may now be either on or off. The  time (in seconds) being displayed is how long it willtake the timer to expire. All these options are subject to be removed in later releases of the NET software.
更多详情可以看这里:
http://www.blogjava.net/aoxj/archive/2008/02/22/181321.html
2. 检查客户端和服务端网络连接,此项检查包括服务端防火墙是否开启(开启了有可能禁用10011端口)
telnet IP 端口
只要能连接可以排除网络问题。
此处忽略了一个重要的信息,日志显示的不太符合常理,访问远端服务器连接不到,应该返回服务器的IP,结果却返回了一个127.0.0.1
上网google了一把,才知道linux下解析主机名的逻辑和windows下不同:
RMI的调用原理是首先Server会返回一个绑定对象,让客户端像调用本地方法一
样调用远程服务,客户端程序向服务端请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作是根据这个hostname来连接服务器端。在server端返回的绑定对象中采用的是server主机名。

可以在服务器端运行
引用
hostname -i 


验证,如果返回的是127.0.0.1,则表示会去调用本机的服务,必然会报错的
而在windows机器上127.0.0.1应该也是可以返回服务器ip的
找到这个原因后,
修改host
运行
引用
sh /etc/init.d/network restart


重启was 服务器,一切OK了



总结:
方法论
分析问题时,先从自己身上找问题。

1.对发现的不正常的日志要注意,例如这里的报错IP不正确。
2.分步骤解决,是否是服务器端的问题,是否是客户端的问题,是否是网络问题。找出每个3.步骤的最简单的验证方法,怀疑是环境问题,写个最简单的helloworld,写个最简单的jsp就可以测试。
4.不要老想在windows下没有问题,linux下就能部署成功,注意操作系统的区别。
5.精简产出,如果你的包过大,则仔细检查是否有多余的包打进来,尽量把多余的包去除。
分享到:
评论
1 楼 gxwgbl 2011-11-30  
也碰到这个问题

引用
修改host


是修改本地的ip 192.168这样的,还是外网的ip

相关推荐

    java远程调用rmi实例

    本实例将深入讲解如何使用Java RMI在Linux环境中启动远程服务,并在Windows环境下进行操作。 首先,理解RMI的基本原理:RMI系统由两部分组成,客户端和服务器端。服务器端暴露远程接口,客户端通过引用这个远程接口...

    JAVA RMI测试代码

    本压缩包文件"rmi-code"包含了一个完整的RMI测试代码示例,适合在Linux和Windows平台上运行,帮助开发者理解和实践RMI的基本操作。 首先,我们需要了解RMI的核心概念: 1. **远程接口**:定义了远程对象需要暴露的...

    rmi-demo.zip

    在IT行业中,远程方法调用(Remote Method Invocation,简称RMI)是一种强大的技术,它允许Java应用程序通过网络调用远程对象的方法,就像调用本地对象一样。RMI是Java平台的标准部分,它基于面向对象的概念,极大地...

    获取windows or unix系统下服务器MAC地址及服务器IP地址

    在Windows和Unix(包括Linux)系统下,获取这两种地址的方法有所不同。下面将详细介绍这两个操作系统下的实现方式以及提供的源码文件`GetMAC.java`。 ### Windows系统下获取MAC地址 在Windows系统中,可以使用`...

    远程桌面 Java Remote Desktop.7z

    Java是一种广泛使用的、跨平台的编程语言,它的“编写一次,到处运行”(Write Once, Run Anywhere)特性使得Java远程桌面应用可以在多种操作系统上运行,如Windows、Linux、Mac OS等。 Java Remote Desktop项目...

    JAVA远程控制软个

    这种软件利用了Java的跨平台特性,可以在不同的操作系统上运行,包括Windows、Mac OS、Linux等。在Java中实现远程控制通常涉及以下几个关键技术点: 1. **RMI(Remote Method Invocation)**:远程方法调用是Java...

    java 局域网监控程序

    Java的可移植性使得开发者能够编写在各种操作系统上运行的代码,包括Windows、Linux和Mac OS等。对于局域网监控程序,Java的优势在于它能够方便地处理网络通信,提供了丰富的类库如Socket和ServerSocket,支持TCP/IP...

    Java开发环境的搭建

    2. 根据你的操作系统(如Windows、macOS、Linux等)选择合适的JDK版本进行下载。 3. 完成下载后,运行安装程序,按照提示进行安装。 4. 设置环境变量,包括JAVA_HOME、PATH和CLASSPATH,确保系统能够正确找到Java...

    java视频百度云地址5

    这意味着Java代码可以跨平台运行,无论是在Windows、Linux还是Mac OS上,只要安装了对应的JVM,就能执行Java程序。 Java语言的特点主要包括: 1. 面向对象:Java是一种面向对象的语言,它允许程序员使用类、对象、...

    remote-desktop-control-java:Java远程桌面控制应用程序

    为了保证软件的健壮性,开发者需要考虑各种可能的异常情况,编写异常处理代码,确保程序在遇到问题时能正常恢复或给出提示。 总结来说,"remote-desktop-control-java"项目涉及了Java编程、远程方法调用、网络通信...

    基于java的视频会议系统毕业设计与实现(源代码+项目报告).zip

    通过使用Java编程语言,开发人员能够构建出跨平台的应用,确保系统在Windows、Linux、Mac等操作系统上的兼容性。 1. **Java核心技术** - **Java基础**: 项目的实现基于Java SE(标准版)平台,主要利用Java的面向...

    remoteprotocol.rar_Java编程_Java_

    Java的“Write Once, Run Anywhere”特性使得开发的软件能够在各种操作系统上运行,这包括Windows、Linux、Mac OS等,为远程桌面应用提供了广泛的兼容性。 1. **Java RMI(Remote Method Invocation)**:Java RMI...

    网络程序设计

    - **RMI**:Java远程方法调用,用于在网络上的Java对象之间进行远程通信。 #### 十一、WEB文档技术 - **HTML**:超文本标记语言,用于创建网页内容。 - **DHTML**:动态HTML,结合HTML、CSS和脚本语言实现动态效果...

Global site tag (gtag.js) - Google Analytics