# Rmi Client und Server Gleichzeitig!



## Anissa (7. Jun 2005)

Hallo Leute!

ich habe ein rmi Beispiel erfolgreich ausgeführt (Seihe Code unten). Aber ich moechte auch mein Client (AdderClient.java) als Server benutzen (d.h. AdderImpl.java und AdderClient.java sind jeweils Server und Client gleichtzeitig). Ist das überhaupt möglich? Wenn ja bitte wie.

Vielen Dank im Vorraus  :wink:

Schöne Grüsse


```
// AdderClient.java (Client)

import java.rmi.Naming; 
public class AdderClient 
{ 
  public static void main( String args[] ) throws Exception 
  { 
    Adder a = (Adder) Naming.lookup( "rmi://129.187.51.223/adder" ); 
     int sum = a.add( 88, 9); 
     System.out.println( sum ); 
  } 
}   



// AdderImpl.java (Server)

import java.rmi.Naming;
import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 

public class AdderImpl extends UnicastRemoteObject implements Adder 
{ 
  public AdderImpl() throws RemoteException 
  { 
  } 
  public int add( int x, int y ) throws RemoteException 
  { 
    return (x +y); 
  } 

  public static void main( String args[] ) throws Exception 
  { 
    Naming.rebind( "rmi://localhost/adder", new AdderImpl() ); 
    System.out.println( "Adder bound" ); 
  } 
}


// Adder.java

import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface Adder extends Remote { 
   public int add( int x, int y ) throws RemoteException; 
}
```


----------



## Nick H. (7. Jun 2005)

warum sollte das nicht gehen

dann würde ja kein Proxy-Server funktionieren


----------



## Anissa (7. Jun 2005)

Danke für die schnelle Antwort. Ich habe die Klassen modifiziert (siehe unten) aber wenn ich die Befehle "rmic AdderClient", "start rmiregistry", "java AdderClient" erhalte ich folgende Meldung:


Exception in thread "main" java.rmi.NotBoundException: adder
        at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:106)
        at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRe...

Ich vermute es liegt daran, dass die Methode Naming.lookup(..) in der Klasse AdderClient ausgeführt wird und der Server AdderImpl.java noch nicht ausgeführt ist. Und wenn ich mit AdderImpl.java als Server anfange, wird das gleiche problem auftreten(weil dort auch die Methode Naming.lookup(..) sich befindet). Was soll ich machen?:-(
Bitte Hilfe!!!
Anissa


----------



## Anissa (7. Jun 2005)

Oh! ich habe den Code vergessen. 

//AdderClient.java

import java.rmi.Naming; 
import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 

public class AdderClient  extends UnicastRemoteObject implements Suber 
{ 
public AdderClient() throws RemoteException 
  { 
  } 
  public int sub( int x, int y ) throws RemoteException 
  { 
    return (x -y); 
  } 

  public static void main( String args[] ) throws Exception 
  { 
     Adder a = (Adder) Naming.lookup( "rmi://localhost/adder" ); 
     int sum = a.add( 88, 9); 
     System.out.println( sum ); 
    Naming.rebind( "rmi://localhost/suber", new AdderClient() ); 
    System.out.println( "Suber bound" ); 
  } 
}


//AdderImpl.java

import java.rmi.Naming;
import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 

//server 
public class AdderImpl extends UnicastRemoteObject implements Adder 
{ 
  public AdderImpl() throws RemoteException 
  { 
  } 
  public int add( int x, int y ) throws RemoteException 
  { 
    return (x +y); 
  } 

  public static void main( String args[] ) throws Exception 
  { 
     Suber s = (Suber) Naming.lookup( "rmi://localhost/suber" ); 
     int su = s.sub( 88, 9); 
     System.out.println( su ); 

    Naming.rebind( "rmi://localhost/adder", new AdderImpl() ); 
    System.out.println( "Adder bound" ); 

  } 
}


//Adder.java 

import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface Adder extends Remote { 
   public int add( int x, int y ) throws RemoteException; 
}


//Suber.java

import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface Suber extends Remote { 
   public int sub( int x, int y ) throws RemoteException; 
}

Schoene Grüsse 
Anissa


----------

