gpt4 book ai didi

java - 注册 RMI 客户端会导致 IllegalArgumentException

转载 作者:行者123 更新时间:2023-12-01 12:09:18 24 4
gpt4 key购买 nike

我有一个简单的 RMI - 客户端、服务器架构。因为我想从服务器进行回调,所以我定义了以下接口(interface):

    public interface Meiern_RMI_Server extends Remote{
public boolean registerClient(RMIClient client) throws RemoteException;
}
public interface Meiern_RMI_Client extends Remote{
public void setTurn(boolean yourTurn) throws RemoteException;
}

这里是 Impl(服务器):

public class RMIServer extends UnicastRemoteObject implements Meiern_RMI_Server{

private Set<RMIClient> clients;

public RMIServer() throws RemoteException {
super();
this.clients = new HashSet<RMIClient>();
}

public static void main(String [] args ){
try {
Registry reg = LocateRegistry.createRegistry(1234);
reg.rebind("server", new RMIServer());
System.out.println("server started");
} catch(Exception e) {
e.printStackTrace();
}
}

@Override
public synchronized boolean registerClient(RMIClient client) throws RemoteException {
boolean registered = false;
try {
registered = clients.add(client);
if(registered) {
System.out.println("Client " + client.getName() + " registered.");
System.out.println(clients);
} else {
System.out.println("Could not register client. Duplicate names " + client.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
return registered;
}

}

客户:

public class RMIClient extends UnicastRemoteObject implements Meiern_RMI_Client {       public RMIClient() throws RemoteException {
super();
}

@Override
public void setTurn(boolean yourTurn) throws RemoteException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public static void main(String [] args) {
try {
RMIClient client = new RMIClient();

Registry reg = LocateRegistry.getRegistry("127.0.0.1", 1234);
Meiern_RMI_Server rmi = (Meiern_RMI_Server)reg.lookup("server");
System.out.println("client connected");
boolean registered = rmi.registerClient(client);
if(registered){
System.out.println("Client registered");
} else {
System.out.println("Could not register client, Change name");
}

while (true) {

}
} catch (Exception e) {
System.out.println("Could not connect to server: ");
e.printStackTrace();
}
}


}

尝试注册客户端时,客户端出现以下异常:

java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:275)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
at com.sun.proxy.$Proxy1.registerClient(Unknown Source)
at meiern.RMIClient.main(RMIClient.java:97)

有什么建议吗?

最佳答案

public boolean registerClient(RMIClient client) throws RemoteExceptio

您不能使用导出的远程对象类型作为远程方法参数或返回类型。将其更改为:

public boolean registerClient(Myeiern_RMI_Client client) throws RemoteException

关于java - 注册 RMI 客户端会导致 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com