Question

J'essaye de construire une application rmi-iiop (chat très simple). J'ai besoin d'un serveur pour pouvoir communiquer avec le client, donc ma pensée était de créer l'interface de l'utilisateur connecté:

public interface UserInterface extends Remote { 
    public void receiveMessage(String message) throws RemoteException;
}

Ensuite, côté client, créez une classe utilisateur avec les méthodes que le serveur peut exécuter ('receiveMessage'):

public class User extends PortableRemoteObject implements UserInterface {

    protected User() throws RemoteException {
        super();
    }

    @Override
    public void receiveMessage(String message) throws RemoteException {
        client.addMessageToGUI();
    }
}

J'utilise rmic -iiop Chat User qui génère _Chat_Tie.class _ChatInterface_Stub.class _User_Tie.class _UserInterface_Stub.class

Après avoir placé tous les fichiers côté serveur et côté client et avoir exécuté l'application, j'obtiens l'erreur suivante: java.rmi.StubNotFoundException: Stub class not found: User_Stub; nested exception is:

Je suppose que la différence ici est que la classe de discussion est créée sur le serveur, puis le client l'utilise en utilisant l'interface (ce qui fonctionne bien), mais la classe d'utilisateur doit être créée côté client, donc le client fonctionne en partie comme un serveur.

Ma question est similaire à Java RMI - Faire du client un serveur mais pour l'implémentation rmi-ioop.

Donc en quelques mots - comment puis-je envoyer une référence d'objet local au serveur pour qu'il puisse effectuer des opérations dessus?

Merci! Léonty

Était-ce utile?

La solution 2

Ce qui me manquait, c'est la classe "Tie" côté client (_User_Tie.class).Habituellement, ce n'est pas nécessaire, mais dans le cas où l'objet est créé côté client - j'avais besoin de le fournir également.

J'espère que cela fera gagner du temps à quelqu'un d'autre dans le futur :)

Autres conseils

vous créez une interface serveur comme:

public interface ChatServer extends Remote {
  public void registerUser(UserInterface user) throws RemoteException;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top