Hallo zusammen,
ich versuche ein Socket Programm in ein RMI Programm zu "Transformieren". Das Problem was ich jedoch habe ist das ich bereits am Anfang scheitere.
Wenn ich im Server ein Objekt rebind und versuche es mit dem Client per lookup zu nutzen, schreibt er mir im Client immer nur den Namen des lookup Objektbezeichner raus.
Hier mal der Code:
Der Handler soll übermittelt werden und die Serverlogik beinhalten.
Der Server: hier stelle ich es mir so vor das dieser nur ein Handler Objekt zur Verfügung stellt.
Zum Schluss noch der Client: nunja der Client soll sich ein Handler Objekt beschaffen und über diese Serverlogik möchte ich dann im Client die Quizlogik aufbauen.
Wie zu erkennen ist versuche ich im Client schon mit
nach dem lookup noch etwas auszugeben, das geht nur nicht. Die 2 sehe ich nie auf der Konsole. Ich sehe eine 1 und dann Test.
Weis jemand wieso das so ist?
ich versuche ein Socket Programm in ein RMI Programm zu "Transformieren". Das Problem was ich jedoch habe ist das ich bereits am Anfang scheitere.
Wenn ich im Server ein Objekt rebind und versuche es mit dem Client per lookup zu nutzen, schreibt er mir im Client immer nur den Namen des lookup Objektbezeichner raus.
Hier mal der Code:
Der Handler soll übermittelt werden und die Serverlogik beinhalten.
Java:
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
import java.util.Random;
public class Handler extends UnicastRemoteObject implements IHandler {
private static final long serialVersionUID = 1L;
private Random random;
private int a;
private int b;
private char operator;
public Handler() throws RemoteException {
super();
random = new Random();
a = random.nextInt(20) + 1;
b = random.nextInt(20) + 1;
operator = getRandomOperator();
// new Thread(this).start();
}
@Override
public String startQuiz() throws RemoteException {
return "Frage des Tages: Wieviel ist " + a + " " + operator + " " + b + " ?\nErgebniss bitte eingeben: ";
}
@Override
public boolean antworten(String ergebnis) throws RemoteException {
double clientResult = Double.parseDouble(ergebnis);
switch (operator) {
case '+':
return (a + b == clientResult);
case '-':
return (a - b == clientResult);
case '*':
return (a * b == clientResult);
case '/':
return (a / b == clientResult);
case '%':
return (a % b == clientResult);
}
return false;
}
private char getRandomOperator() {
int r = random.nextInt(5); // Intervall [0, 5)
switch (r) {
case 0:
return '-';
case 1:
return '*';
case 2:
return '/';
case 3:
return '%';
case 4:
return '+';
}
return '+';
}
}
Java:
import java.rmi.*;
public interface IHandler extends Remote {
public String startQuiz() throws RemoteException;
public boolean antworten(String ergebnis) throws RemoteException;
}
Der Server: hier stelle ich es mir so vor das dieser nur ein Handler Objekt zur Verfügung stellt.
Java:
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class Server {
public static void main(String[] args) {
try {
Handler myQuiz = new Handler();
LocateRegistry.createRegistry(1055);
Naming.rebind("Test", myQuiz);
System.out.println("Server ist gestartet");
} catch (Exception e) {
System.out.println("Ausnahme: " + e.getMessage());
e.printStackTrace();
}
}
}
Zum Schluss noch der Client: nunja der Client soll sich ein Handler Objekt beschaffen und über diese Serverlogik möchte ich dann im Client die Quizlogik aufbauen.
Java:
import java.rmi.*;
public class Client {
public static void main(String[] args) {
try {
System.out.println("1");
Handler myQuiz = (Handler) Naming.lookup("//localhost:1055/Test");
System.out.println("2");
String test = myQuiz.startQuiz();
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
Wie zu erkennen ist versuche ich im Client schon mit
Code:
System.out.println("2");
Weis jemand wieso das so ist?