RMI ConnectException

ami_05
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 14. Nov 2005 15:55
Wohnort: Ganz nah

RMI ConnectException

Beitrag von ami_05 »

Hallo eine Frage,
habe einen kleinen Server geschrieben und beim ausführen im Eclipse bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
	java.net.ConnectException: Connection refused: connect
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
	at sun.rmi.server.UnicastRef.newCall(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
	at java.rmi.Naming.rebind(Unknown Source)........
Ich arbeite unter windows XP.
Auf der Console führe ich so aus, wobei ich auch die gleiche Fehlermeldung bekomme: java -Djava.rmi.server.codebase=file:/E:\UNI_WORKSPACE\TK1P5\server.jar -Djava.security.policy=file:/E:\UNI_WORKSPACE\TK1P5\server.policy

In server.policy steht folgendes:

Code: Alles auswählen

grant {
    permission java.security.AllPermission;
};
Kann jemand mir sagen, wie man diesen Fehler beheben kann??

Danke.

Benutzeravatar
klospatz
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 230
Registriert: 16. Dez 2003 14:01
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von klospatz »

die rmiregistry gestartet?

ami_05
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 14. Nov 2005 15:55
Wohnort: Ganz nah

Beitrag von ami_05 »

klospatz hat geschrieben:die rmiregistry gestartet?
Ich habe ihn gerade extern (also nicht direkt im Code) gestartet einmal mit Port und ohne Port Nummer aber ich habe immer noch die gleicher Fehlermeldung.

Benutzeravatar
klospatz
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 230
Registriert: 16. Dez 2003 14:01
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von klospatz »

der fehler ist aus der ferne schlecht zu lokalisieren.

- hast du den server richtig angemeldet? z.b. ueber Naming.rebind("rmi://localhost/MyCoolServer", new MyCoolServerImpl()); ?
- sicher, dass du bei der codebaseangabe ueber die commandozeile backslashes benutzen darfst?
- ...

ich wuerde dir raten das rmi-plugin fuer eclipse [1] zu installieren. unter anderem kommt es mit einer registry-inspector daher und nimmt dir das gefummel mit der codebase ab.
auf deren demoseite [2] sind einige informative flashvideos die du dir auch anschauen koenntest. vielleicht hilft das weiter.

[1] http://www.genady.net/rmi/index.html
[2] http://www.genady.net/rmi/v20/demos/

ami_05
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 14. Nov 2005 15:55
Wohnort: Ganz nah

Beitrag von ami_05 »

klospatz hat geschrieben:der fehler ist aus der ferne schlecht zu lokalisieren.

- hast du den server richtig angemeldet? z.b. ueber Naming.rebind("rmi://localhost/MyCoolServer", new MyCoolServerImpl()); ?
- sicher, dass du bei der codebaseangabe ueber die commandozeile backslashes benutzen darfst?
- ...

ich wuerde dir raten das rmi-plugin fuer eclipse [1] zu installieren. unter anderem kommt es mit einer registry-inspector daher und nimmt dir das gefummel mit der codebase ab.
auf deren demoseite [2] sind einige informative flashvideos die du dir auch anschauen koenntest. vielleicht hilft das weiter.

[1] http://www.genady.net/rmi/index.html
[2] http://www.genady.net/rmi/v20/demos/
das hat zwar mir nicht viel geholfen, aber es ist gut zu wissen dass sowas gibt (Danke für deine Infos) und ich habe durch einen Bekannten den Fehler gefunden.

es lag einfach an folgenden Zeilen:
alter Code:

Code: Alles auswählen

Naming.rebind("rmi://127.0.0.1:233/" + ServerName, MyServer);
habe ersetzt durch folgenden Code:

Code: Alles auswählen

LocateRegistry.createRegistry(233);
Registry r = LocateRegistry.getRegistry(233);
r.bind(ServerName, MyServer);
und damit kann ich momentan wenigstens den Server starten. WOOOOW

zaki_mann
Erstie
Erstie
Beiträge: 14
Registriert: 26. Nov 2007 21:36

Beitrag von zaki_mann »

hi,
ich habe das gleiche Problem wie bei dir und das gleiche Fehler-Meldung, ich habe genau die Zeilen geändert, die du auch geändert hast. es hat leider nichts geholfen.
ich bin ratlos! kannst du mir vielleicht helfen. oder kann mir jemand hier behilflich sein.
ich habe das beispiel aus der Vorlesung wort wörtlich abgetippt, und das funktioniert bei mir nicht. da ich ja Eclipse benutze, weisse ich nicht wie ich Ihn sage, dass er die Policy benutzen soll. und auf die Hier angegebene Seite, ist die Plugin nicht verfügbar.

Danke im Voraus,

Benutzeravatar
klospatz
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 230
Registriert: 16. Dez 2003 14:01
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von klospatz »

die argumente an die jvm uebergibst du echlise im run-dialog. "jvm arguments" (oder so aehnlich). ich glaube im zweiten reiter.

habe gerade gesehen, dass mittlerweile auf der uebungshomepage ein "rmi-intro" verfuegbar ist. wozu der sich ausschweigt ist das setzen eines securitymanagers [1]. ohne den wird kein codedownload per rmi moeglich sein.

System.setSecurityManager(new RMISecurityManager());


[1] http://java.sun.com/javase/6/docs/api/j ... nager.html

zaki_mann
Erstie
Erstie
Beiträge: 14
Registriert: 26. Nov 2007 21:36

Beitrag von zaki_mann »

die Security Manager ist auch schon bei mir gebunden trotzdem ist die gleiche Warnung immer zu sehen.
kannst du mir vielleicht einfach sagen welche Einstellungen du vorgenommen hast, du benutzt auch eclipse oder!

ich danke dir

ami_05
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 14. Nov 2005 15:55
Wohnort: Ganz nah

Beitrag von ami_05 »

Man muss nicht unbedingt den Securtiy-Manager setzen und somit auch keine Policy eingeben.

Zu der Fehler Meldung:
Folgender Code würde beim mir unter Eclipse und WinXP (habe auch im RBG Rechner getestet und die gleiche Fehlermeldung bekommen) die Fehlermeldung ausgeben

Code: Alles auswählen

package demo.rmi.print.common;

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

public interface RemotPrinter extends Remote {

	public int submitJob(String text) throws RemoteException;
	public boolean isComplete(int jobID) throws RemoteException;
	public String getPrinterStatus() throws RemoteException;
	

}


package demo.rmi.print.client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import demo.rmi.print.common.RemotPrinter;
import demo.rmi.print.server.RemotePrinterImpl;

public class client {
	public static void main(String[] args) throws MalformedURLException, RemoteException, NotBoundException {
		
		RemotPrinter server = (RemotPrinter)Naming.lookup("rmi://127.0.0.1:233/printer");
		server.submitJob("testing");
		
	}
}

package demo.rmi.print.server;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

import demo.rmi.print.common.RemotPrinter;

public class RemotePrinterImpl extends UnicastRemoteObject implements
		RemotPrinter {

	protected RemotePrinterImpl() throws RemoteException {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public String getPrinterStatus() throws RemoteException {
		System.out.println("requestet printer status");
		return "OK";
	}

	@Override
	public boolean isComplete(int jobID) throws RemoteException {
		System.out.println("requested job status");
		return true;
	}

	@Override
	public int submitJob(String text) throws RemoteException {
		System.out.println("submitted job"+text);
		return 0;
	}
	
	public static void main(String[] args){
		try{		
			Naming.rebind("rmi://localhost:233/printer", new RemotePrinterImpl());

		}catch(Exception e){
			e.printStackTrace();
		}
	}

}
Der oben anegebene Code liefert dann bei mir folgende Fehlermeldung:

Code: Alles auswählen

java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
	java.net.ConnectException: Connection refused: connect
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
	at sun.rmi.server.UnicastRef.newCall(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
	at java.rmi.Naming.rebind(Unknown Source)
	at demo.rmi.print.server.RemotePrinterImpl.main(RemotePrinterImpl.java:50)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
	... 7 more
Und wenn mann jetzt diesen Befehl oben im Code :

Code: Alles auswählen

	Naming.rebind("rmi://localhost:233/printer", new RemotePrinterImpl());

durch folgende Code Zeilen ersetzt:

Code: Alles auswählen

LocateRegistry.createRegistry(233);
			Registry r = LocateRegistry.getRegistry(233);
			r.bind("printer", new RemotePrinterImpl());
dann funktioniert es...

Antworten

Zurück zu „Archiv“