RMI Methodenaufruf funktioniert nur lokal

sebileiste

Mitglied
Hallo,

erstmal der Code:

ServerInterface.java
Java:
import java.rmi.Remote;
import java.rmi.RemoteException;


public interface ServerInterface extends Remote{
	
	public String hello(String text, ClientInterface c) throws RemoteException;

}

Server.java
Java:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;


public class Server extends UnicastRemoteObject implements ServerInterface {

	protected Server(String ip) throws RemoteException {
		super();
		LocateRegistry.createRegistry(1099);
		LocateRegistry.getRegistry(1099);
		try {
			Naming.rebind("//" + ip +"/RMI", this);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public String hello(String text, ClientInterface c) throws RemoteException {
		c.notifyme();
		String ret = "Hello " + text;
		return ret;
	}
	
	public static void main(String[] args){
		try {
			Server server = new Server(args[0]);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

}

ClientInterface.java
Java:
import java.rmi.Remote;
import java.rmi.RemoteException;


public interface ClientInterface extends Remote {
	
	public void notifyme() throws RemoteException;

}

Client.java
Java:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.RemoteObject;
import java.rmi.server.UnicastRemoteObject;


public class Client implements ClientInterface {

	
	public Client(String ip){
		super();
		
		try {
			LocateRegistry.getRegistry(ip);
			UnicastRemoteObject.exportObject(this,0);
			Remote ro = Naming.lookup("//" + ip + "/RMI");	
			System.out.println("Lookup done ... trying to communicate");
			ServerInterface server = (ServerInterface) ro;
			System.out.println(server.hello("Client", this));			
				
		} catch (NotBoundException e) {
			e.printStackTrace();
		}	
		
		catch (RemoteException e) {
			e.printStackTrace();
		}
		catch(MalformedURLException e)
		{
			e.printStackTrace();
		}

	}
	
	@Override
	public void notifyme() throws RemoteException {
		System.out.println("Serverfunction hello() here ...");
		
	}
	
	public static void main(String[] args){
		Client c = new Client(args[0]);
	}

}
Das ganze funktioniert lokal wunderbar, sobald ich aber den Client auf einem anderen Rechner im Netzwerk starte funktioniert zwar der Lookup, wenn ich aber eine Methode auf dem Server aufrufe bekomme ich folgende Exception(s):
Code:
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
	java.net.ConnectException: Connection refused
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:110)
	at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
	at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
	at $Proxy1.hello(Unknown Source)
	at Client.<init>(Client.java:23)
	at Client.main(Client.java:48)
Caused by: java.net.ConnectException: Connection refused
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:529)
	at java.net.Socket.connect(Socket.java:478)
	at java.net.Socket.<init>(Socket.java:375)
	at java.net.Socket.<init>(Socket.java:189)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
	... 8 more

Wo steckt der Fehler? Bzw. was habe ich vergessen?

Vielen Dank schonmal für eure Bemühungen!

Grüße, Sebastian
 
Zuletzt bearbeitet:

sebileiste

Mitglied
Problem gefunden:

127.0.0.1 & 127.0.1.1 Einträge in /etc/hosts auskommentieren ... Nun möchte ich mein Programm aber auf Rechnern im Netzwerk nutzen, auf denen ich keine root-Rechte habe ... gibts da evtl. noch ne andere Lösung?
 

sebileiste

Mitglied
Ich muss leider zurückrudern, es funktionierte genau einmal, nun steh ich wieder da, Binding und Lookup funktionieren. Kommunikation zwischen den Teilnehmern endet in einem Timeout, lokal funktioniert alles prächtig. Ich bin für jede Idee sehr dankbar :(
 

dku

Mitglied
Irgendwie find ich die 127.0.1.1 als Server IP Adresse etwas befremdlich - vermutlich landest du immer auf dem Loopback Device der Maschine auf dem du den Client ausführst.

Würde da einmal ansetzen ;-)

Viele Grüße,
David
 

dku

Mitglied
Laut deinem Client Code ist der erste übergebene Parameter beim Starten die IP Adresse des Servers.

Viele Grüße,
David
 

sebileiste

Mitglied
Ja, richtig, die gebe ich ja auch an ... der Lookup fünktioniert ja auch ... entweder steh ich grad mächtig auf dem Schlauch oder wir reden aneinander vorbei :D
 
T

tuxedo

Gast
Öhm, gibts einen Grund warum du auf Serverseite erst eine Registry erzeugst und dann noch getRegistry() aufrufst? Da müsste doch createRegistry() ausreichen?

Vielleicht hilft dir ja auch meine Signatur weiter ;)
 

sebileiste

Mitglied
Gute Frage, hab das getRegistry() rausgeworfen ... änder aber leider nix: Lookup ok, dann Timeout anstelle von Methodenaufruf. Und das mit dem LookUp funktioniert auch nur in eine Richtung. Starte ich auf dem Ubuntu-System den Server, funktioniert der LookUp, in die andere Richtung funktioniert nichtmal der LookUp, TimeOut als Ergebnis habe ich aber auch hier. Irgendwie herrscht hier bei mir grad die reine Willkür oO

Hats von euch nicht zufällig mal jemand bei sich lokal versucht? :D

RMI ist vorgegeben, von daher hilft mir dein Link nur für spätere Aufgaben weiter ;-)
 

sebileiste

Mitglied
Ich hab mal die hello()-Methode auf dem Server um eine Konsolenausgabe erweitert, um zu schauen, ob der Methodenaufruf überhaupt ankommt ... und siehe da, ca 3min nach dem Lookup des Clients bekomm ich die Ausgabe auf dem Server ... nach weiteren ~3min kommt dann schliesslich der Timeout. Womöglich würde ohne Timeout auch irgendwann die Antwort des Servers beim Client ankommen. Irgendwas läuft doch dort komplett schief -.-
 

sebileiste

Mitglied
Problem solved:

java -Djava.rmi.server.hostname=serverhostname Server serverhostname
java -Djava.rmi.server.hostname=clienthostname Client serverhostname

Danke für die Unterstützung :)
 
T

tuxedo

Gast
Normalerweise ist das nicht nötig. Das deutet auch seltsame hosts/DNS Einträge hin. Check mal in beiden Richtungen die Namensauflösung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A RMI RMI Methodenaufruf funktioniert nur spontan Netzwerkprogrammierung 5
T Methodenaufruf per SSL ( RMI ) Netzwerkprogrammierung 5
R Sicherheit bei entferntem Methodenaufruf mittels RMI Netzwerkprogrammierung 4
T Mit RMI Server: Methodenaufruf Client zuordnen Netzwerkprogrammierung 5
JavaDevOp Socket Status von UDP-Port prüfen (PortUnreachableException funktioniert nicht?) Netzwerkprogrammierung 32
B Multicast-Nachrichten-Empfang funktioniert nicht Netzwerkprogrammierung 5
S BufferedStream funktioniert nicht immer Netzwerkprogrammierung 7
G UDP Packet empfangen funktioniert nicht. Netzwerkprogrammierung 16
Dann07 Proxy funktioniert nicht so wie gewünscht! Netzwerkprogrammierung 18
M Textchat Funktioniert nur halb Netzwerkprogrammierung 2
H Einfacher Server funktioniert nicht Netzwerkprogrammierung 1
N Test Servlet funktioniert nicht Netzwerkprogrammierung 11
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
KingSquizzi3 Website parsen mit Hilfe von jsoup funktioniert nicht Netzwerkprogrammierung 3
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
G Mail senden funktioniert nicht mit SSL Netzwerkprogrammierung 7
L IText mit Servlets, funktioniert nicht Netzwerkprogrammierung 0
D TCP Socket funktioniert nicht richtig Netzwerkprogrammierung 3
L Email versenden mit Java funktioniert nicht, Fehlermeldungen: MessagingException & SocketException Netzwerkprogrammierung 10
C Portscanner funktioniert nicht! Netzwerkprogrammierung 8
K Chatprogramm - Server funktioniert nicht Netzwerkprogrammierung 5
G FTP FTP-Client funktioniert nicht bei Modem-Verbindungen Netzwerkprogrammierung 8
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
M HTTP File Upload mit Prozessbar Funktioniert nicht. Netzwerkprogrammierung 8
J FTP FTP funktioniert nicht. Netzwerkprogrammierung 5
R Client funktioniert nicht Netzwerkprogrammierung 2
M while-Schleife funktioniert nicht bei Nachrichtempfang von Server Netzwerkprogrammierung 3
L Socket Chat funktioniert nicht Netzwerkprogrammierung 2
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
C Java Chat funktioniert nicht richtig Netzwerkprogrammierung 6
V Quelltaxt einer Website auslesen funktioniert nicht Netzwerkprogrammierung 2
S RMI RMI-Applet kommunikation funktioniert nicht Netzwerkprogrammierung 8
D FTP Pfadangabe für ftp-upload funktioniert nicht Netzwerkprogrammierung 5
A Socket UnknownHostException funktioniert nicht! Netzwerkprogrammierung 3
B Socket Daten empfangen funktioniert nicht richtig - wo liegt der Fehler? Netzwerkprogrammierung 7
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
T RMI - Client Zugriff auf Server funktioniert nicht Netzwerkprogrammierung 5
M RMI, cast funktioniert nich Netzwerkprogrammierung 2
P Bilder: FTP-Upload funktioniert nicht richtig Netzwerkprogrammierung 2
G Datein versenden funktioniert nicht ! Netzwerkprogrammierung 19
W RMI funktioniert nur wenn ich im selben Eclipse Projekt bin Netzwerkprogrammierung 3
S OutputStreamWriter funktioniert nicht wie ich will Netzwerkprogrammierung 2
M serialisierung funktioniert nur nach neuer instanzierung Netzwerkprogrammierung 3
G Google-Suche funktioniert nicht Netzwerkprogrammierung 6
S Server - Telnet funktioniert, Server - Client nicht Netzwerkprogrammierung 3
F SimpleFTP funktioniert nicht Netzwerkprogrammierung 6
N UDP zwischen Java und C++ funktioniert nicht. Netzwerkprogrammierung 4
L JavaMail: Versenden von mails funktioniert nicht Netzwerkprogrammierung 7
T Laufen Objekte, die vom Cajo-Server geliefert werden, lokal auf dem Client? Netzwerkprogrammierung 4
L RMI-Funktion wird lokal ausgeführt Netzwerkprogrammierung 12
M RMI lokal über externe IP geht nicht Netzwerkprogrammierung 5
G RMI + Applet - Verbindung nur lokal Netzwerkprogrammierung 27

Ähnliche Java Themen

Neue Themen


Oben