在测试RMI远程方法调用时,客户端程序和服务器端程序连接不通,关键代码如下:CalculatorServer:
Calculator cal = new CalculatorImpl();
Context context = new InitialContext();
context.bind("rmi://localhost:1099/CalculatorService",cal);
System.out.println("Server started...");CalculatorClient:
Context context = new InitialContext();
Calculator cal = (Calculator)context.lookup("rmi://118.228.151.231:1099/CalculatorService");
System.out.println(cal.add(10,5));
System.out.println(cal.sub(10,5));
System.out.println(cal.mul(10,5));
System.out.println(cal.div(10,5));
当客户端程序和服务器端程序位于同一台机器并且把客户端rmi设为localhost:1099时可以连接并调用方法得到正确返回值,但是只要把客户端rmi改为当前主机IP就连接不通了,把客户端程序和服务器端程序分置在两台机器上后就更连不通了,但报的都是一样的错。报错如下:
D:\java\RMI>start rmiregistryD:\java\RMI>start java CalculatorServerD:\java\RMI>java CalculatorClient
Exception in thread "main" javax.naming.ServiceUnavailableException [Root except
ion is java.rmi.ConnectException: Connection refused to host: 118.228.151.231; n
ested exception is:
java.net.ConnectException: Connection timed out: connect]
at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source)
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at CalculatorClient.main(CalculatorClient.java:11)
Caused by: java.rmi.ConnectException: Connection refused to host: 118.228.151.23
1; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
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)
... 4 more
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
ource)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
ource)
... 9 more
我的预期是做出一个服务器端程序提供加减乘除服务,然后客户端程序可以通过调用代理对象上的方法实现对服务器端远程方法的调用,传递过去两个参数并得到相应运算的结果,服务器端程序和客户端程序要位于两台不同的机器上,但就是测试不通,该怎么修改呢?望高手指点!谢谢
Calculator cal = new CalculatorImpl();
Context context = new InitialContext();
context.bind("rmi://localhost:1099/CalculatorService",cal);
System.out.println("Server started...");CalculatorClient:
Context context = new InitialContext();
Calculator cal = (Calculator)context.lookup("rmi://118.228.151.231:1099/CalculatorService");
System.out.println(cal.add(10,5));
System.out.println(cal.sub(10,5));
System.out.println(cal.mul(10,5));
System.out.println(cal.div(10,5));
当客户端程序和服务器端程序位于同一台机器并且把客户端rmi设为localhost:1099时可以连接并调用方法得到正确返回值,但是只要把客户端rmi改为当前主机IP就连接不通了,把客户端程序和服务器端程序分置在两台机器上后就更连不通了,但报的都是一样的错。报错如下:
D:\java\RMI>start rmiregistryD:\java\RMI>start java CalculatorServerD:\java\RMI>java CalculatorClient
Exception in thread "main" javax.naming.ServiceUnavailableException [Root except
ion is java.rmi.ConnectException: Connection refused to host: 118.228.151.231; n
ested exception is:
java.net.ConnectException: Connection timed out: connect]
at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source)
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at CalculatorClient.main(CalculatorClient.java:11)
Caused by: java.rmi.ConnectException: Connection refused to host: 118.228.151.23
1; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
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)
... 4 more
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
ource)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
ource)
... 9 more
我的预期是做出一个服务器端程序提供加减乘除服务,然后客户端程序可以通过调用代理对象上的方法实现对服务器端远程方法的调用,传递过去两个参数并得到相应运算的结果,服务器端程序和客户端程序要位于两台不同的机器上,但就是测试不通,该怎么修改呢?望高手指点!谢谢
还要注意是否有防火墙禁止了1099端口
localhost是你的127.0.0.1 ,改为:
context.bind("rmi://118.228.151.231:1099/CalculatorService",cal);
出错吗?
Naming.lookup进行查找服务的?!
我是在自己的两台机器上测试的,一台做客户机一台做服务器,没搭局域网。客户端IP好像用不到吧?服务器IP是在百度上查到的,不过拨号上网获得的IP是动态IP,好像动态IP不能被访问,问题出在了IP访问这块,就是不知道该怎样进行设置
设为localhost时正常显示“Server started...”,换成服务器端IP后就是:
Trouble:javax.naming.ServiceUnavailableException [Root exception is java.rmi.Con
nectException: Connection refused to host: 112.3.254.118; nested exception is:
java.net.ConnectException: Connection timed out: connect]
-----------
InitialContext一般在JNDI中才会用到--------------
你先在同一台机器上跑通再说嘛