注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一线天色 天宇星辰

天下武功,唯快不破

 
 
 

日志

 
 

RMI在双网卡下无法连接的问题与修复  

2013-01-02 16:07:55|  分类: 软件开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

最近在做一个小项目需要用到RMI的服务,使用Spring提供的RMI服务,启动后一直报无法连接!

代码如下

服务端代码

    <bean id="RMISenderService" class="com.yhj.spring.rpc.rmi.RMISenderServiceImpl">

    </bean>

    <bean class="org.springframework.remoting.rmi.RmiServiceExporter">

       <property name="service" ref="RMISenderService"></property>

       <property name="serviceName" value="rmiService"></property>

       <property name="registryPort" value="8000"></property>

       <property name="serviceInterface">

           <value>com.yhj.spring.rpc.rmi.RMISenderService</value>

       </property>

    </bean>

客户端代码

    <bean id="rmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">

       <property name="serviceUrl">

           <value>rmi://${rmiServer}/rmiService</value>

       </property>

       <property name="serviceInterface">

           <value>com.yhj.spring.rpc.rmi.RMISenderService</value>

       </property>

    </bean>

启动后一直为如下错误

Exception in thread "main" org.springframework.remoting.RemoteConnectFailureException: Could not connect to remote service [rmi://192.168.101.156:1109/rmiService]; nested exception is java.rmi.ConnectException: Connection refused to host: ; nested exception is:

    java.net.ConnectException: Connection refused: connect

    at org.springframework.remoting.rmi.RmiClientInterceptorUtils.convertRmiAccessException(RmiClientInterceptorUtils.java:190)

    at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:347)

    at org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:259)

    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

    at $Proxy1.doSth(Unknown Source)

    at com.yhj.spring.client.rpc.RPCClient.testRMI(RPCClient.java:20)

    at com.yhj.spring.client.rpc.RPCClient.main(RPCClient.java:25)

Caused by: java.rmi.ConnectException: Connection refused to host: ; nested exception is:

    java.net.ConnectException: Connection refused: connect

    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)

    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)

    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)

    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:110)

    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)

    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)

    at $Proxy0.invoke(Unknown Source)

    at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:398)

    at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:344)

    ... 6 more

Caused by: java.net.ConnectException: Connection refused: connect

    at java.net.PlainSocketImpl.socketConnect(Native Method)

    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)

    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)

    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)

    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

    at java.net.Socket.connect(Socket.java:519)

    at java.net.Socket.connect(Socket.java:469)

    at java.net.Socket.<init>(Socket.java:366)

    at java.net.Socket.<init>(Socket.java:180)

    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)

    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)

    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)

    ... 14 more

 

再次确认代码,服务端正常,地址正常,防火墙处于关闭状态!很奇怪,突然想到当年烤漆JMX端口的时候,有双网卡的问题,需要配置这么一段,其中有一个IP需要指定自己就很奇怪-Djava.rmi.server.hostname=192.168.101.88 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false,于是查资料,原来是Linux下配置了多网卡,返回的时候是随机寻找一个,因此引发了某些情况下出现无法链接的问题(可参考http://java.sun.com/j2se/1.5.0/docs/guide/rmi/faq.html#netmultihomed!

知道了问题,解决就方便了!

如果是客户端程序,可通过System.setProperty (“java.rmi.server.hostname”,” 192.168.101.15”)方法设置你的IP信息。

如果是服务端如Tomcat等运行的程序,只需在启动参数变量java option增加启动参数-Djava.rmi.server.hostname=192.168.101.156即可!

试试看,现在是不是可以了呢?

 

  评论这张
 
阅读(4450)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017