怎么让Rmi运行在两台电脑上面?就是说我的服务器在一台电脑上 客户端是在另一台电脑上 我的url该怎么写?每次我连接的时候都会出现这样的错误
java.rmi.ConnectException: Connection refused to host: 192.168.1.106; 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.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at dingqiaowu.frame.Login.initServerConnection(Login.java:59)
at dingqiaowu.frame.Login.<init>(Login.java:46)
at dingqiaowu.frame.Login$1.run(Login.java:40)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
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:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
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)
... 15 more
192.168.1.106是我本机的IP 我改成我局域网的另一个IP 他一直显示这个IP
服务端的代码是
client = new Server();
System.setProperty("java.rmi.server.hostname",
"192.168.1.3");
Registry reg = LocateRegistry.createRegistry(
Registry.REGISTRY_PORT);
reg.rebind("rmi://192.168.1.3:1099/dingqiaowu", client);
客户端是
Registry reg = LocateRegistry.getRegistry(Registry.REGISTRY_PORT);
System.getProperty("java.rmi.server.hostname",
"192.168.1.3");
this.server = (ServerInterface) reg.lookup("rmi://192.168.1.3:1099/dingqiaowu");
java.rmi.ConnectException: Connection refused to host: 192.168.1.106; 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.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at dingqiaowu.frame.Login.initServerConnection(Login.java:59)
at dingqiaowu.frame.Login.<init>(Login.java:46)
at dingqiaowu.frame.Login$1.run(Login.java:40)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
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:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
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)
... 15 more
192.168.1.106是我本机的IP 我改成我局域网的另一个IP 他一直显示这个IP
服务端的代码是
client = new Server();
System.setProperty("java.rmi.server.hostname",
"192.168.1.3");
Registry reg = LocateRegistry.createRegistry(
Registry.REGISTRY_PORT);
reg.rebind("rmi://192.168.1.3:1099/dingqiaowu", client);
客户端是
Registry reg = LocateRegistry.getRegistry(Registry.REGISTRY_PORT);
System.getProperty("java.rmi.server.hostname",
"192.168.1.3");
this.server = (ServerInterface) reg.lookup("rmi://192.168.1.3:1099/dingqiaowu");
192.168.1.3哪个是server?哪个是client?错误来看,代码还是在尝试连接192.168.1.106,但是106上没有服务或者rmiregistry没有开?你的代码没有securityManager,应该不是policy的问题检查你的代码到底连哪个?
package com.rmi.client;import java.rmi.Naming;import com.rmi.server.IServer;public class Client { public static void main(String[] args) {
try {
String url = "//localhost:8888/SERVER";
IServer server = (IServer) Naming.lookup(url);
boolean flage = server.checkLogin("East","123");
System.out.println("调用远程的方法返回为:-------"+flage);
} catch (Exception se) {
se.printStackTrace();
} }
}
package com.rmi.server;import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;/**
* 对接口的实现
*
* @author 张栋芳
*
*/
public class IServerImpl extends UnicastRemoteObject implements IServer { public IServerImpl() throws RemoteException {
super();
} public boolean checkLogin(String userName, String pwd)
throws RemoteException {
boolean flage = false;
if ("East".equals(userName) && "123".equals(pwd)) {
flage = true;
}
return flage;
} public boolean server(String server) throws RemoteException { return false;
}}
package com.rmi.server;import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;public class RmiServer { public static void main(String[] args) {
try {
LocateRegistry.createRegistry(8888);
IServerImpl server = new IServerImpl();
Naming.rebind("//localhost:8888/SERVER", server);
System.out.println("远程对象注册成功,RMI服务已经启动,等待客户端调用....");
} catch (Exception se) {
se.printStackTrace();
}
}}
this.server = (ServerInterface) reg.lookup("rmi://192.168.1.2:1099/dingqiaowu");
Ip是其它电脑上的 如果服务器放在本机
reg.lookup("rmi://192.168.1.2:1099/dingqiaowu");
这句话里面放啥都没错 只要客户端一样就行
现在一台做电脑做服务器 一台做客户端连接就有问题了
为什么我的工程路径写的是rmi://192.168.1.102:1099/dingqiaowu
他却报192.168.1.106?//这个是我本机的IP
//192.168.1.102是另一台开了服务的电脑