java - 如何在java中测试RMI程序
问题描述
当我试图实现我的第一个 RMI 程序时,我在测试它时遇到了麻烦。
我编译了我的程序并尝试启动我的服务器,但随后出现错误。
关于我的服务器:1 个接口 + 1 个实现它的类 + 我的服务器类
界面
package src; import java.rmi.*; public interface Information extends Remote { // methods than can be called remotly public String getInformation() throws RemoteException; }
类实现它
package src; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; public class InformationImpl extends UnicastRemoteObject implements Information { protected InformationImpl() throws RemoteException { super(); } public String getInformation() throws RemoteException { System.out.println("method getInformation()"); return "hello"; } }
我的服务器类:
package src; import java.net.InetAddress; import java.net.MalformedURLException; import java.net.UnknownHostException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; public class LanceServeur { public static void main(String[] args) { try { LocateRegistry.createRegistry(1099); InformationImpl informationImpl = new InformationImpl(); Naming.rebind("MyServer", informationImpl); System.out.println("Server launched"); } catch (Exception e) { e.printStackTrace(); } } }
我的客户班:
package src; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.Remote; import java.rmi.RemoteException; public class lanceClient { public static void main(String[] args) { System.out.println("Lancement du client"); try { Remote r = Naming.lookup("rmi://localhost:1099/TestRMI"); System.out.println(r); if (r instanceof Information) { String s = ((Information) r).getInformation(); System.out.println("chaine renvoyee = " + s); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (NotBoundException e) { e.printStackTrace(); } System.out.println("end of client"); } }
如果您想查看正确的行,请查看我的 github,这更容易: https ://github.com/TLprojet/MUD_Java
关于错误,这里是:
java.rmi.ConnectIOException: Exception creating connection to: 0.0.21.214; nested exception is:
java.net.SocketException: Invalid argument or cannot assign requested address
at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:631)
at java.rmi/sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:209)
at java.rmi/sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:196)
at java.rmi/sun.rmi.server.UnicastRef.newCall(UnicastRef.java:338)
at java.rmi/sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:147)
at java.rmi/java.rmi.Naming.rebind(Naming.java:177)
at src.LanceServeur.main(LanceServeur.java:16)
Caused by: java.net.SocketException: Invalid argument or cannot assign requested address
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at java.base/java.net.Socket.connect(Socket.java:540)
at java.base/java.net.Socket.<init>(Socket.java:436)
at java.base/java.net.Socket.<init>(Socket.java:213)
at java.rmi/sun.rmi.transport.tcp.TCPDirectSocketFactory.createSocket(TCPDirectSocketFactory.java:40)
at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 6 more
解决方案
推荐阅读
- javascript - 当我第一次按下按钮时,它不会执行我的 JavaScript,直到我第二次按下它
- python - 在提示文件中排序和打印多行
- snowflake-cloud-data-platform - 使用 Snowflake 将时间 PST/PDT 转换为时间戳
- indexing - 基于三列值的标题拉取
- azure - Create custom Azure DevOps Service Connection for rest api
- r - case_when 在条件不满足时执行代码
- javascript - Is it possible to use bundled assets and "[name].bundle.js" files of a first project as an entry point for a new project?
- python - 使用 matplotlib 的 imshow 绘制具有相同颜色分配的多个图像
- javascript - Stealing User cookies using XSS
- pyspark - 是否有任何pyspark方法来读取具有不同标题的多个文件