ERLEDIGT
JA
JA
ANTWORTEN
18
18
ZUGRIFFE
4415
4415
EMPFEHLEN
-
Hallo,
ich habe da ein Probelm, komm überhaupt nicht weiter, kann jemand von euch helfen ?
Also, ich habe zwei kleine Java Programme geschrieben die RMI nutzen, einen Server und einen Client...
Der Client kann aber nicht connecten, also zur rmi registry schon, aber tcp wohl nicht...
PC1 opensuse 10.3 und PC2 opensuse 10.2
Das Server Programm auf PC1 ist erreichbar von PC2 (getestet mit telnet).
Es ist bei beiden Programmen ein Security Manager installiert (siehe code).
Meine rmi.policy datei hat den Inhalt und ist bei beiden Programmen gleich :
Code :1 2 3 4
grant{ permission java.security.AllPermission; };
Meine Vermutung ist das da irgenwas mit den Security Manager rechten schief geht (die globale Java Security.policy erlaubt erweiterungen über Kommandozeile)...
Bekomme die Exception vom Client :
Code :1 2 3 4
Registry Remote obj: Server java.rmi.ConnectException: Connection refused to host: 127.0.0.2; nested exception is: java.net.ConnectException: Connection refused
Wie man an der Ausgabe sieht, kann der Client sich von der Registry auf PC1 das remote object "Server" holen bzw. kennt es, aber mehr dann auch nicht !
Das ist die Ausgabe wenn das Server Programm nicht läuft :
Code :1 2 3
java.rmi.ConnectException: Connection refused to host: 192.168.0.11; nested exception is: java.net.ConnectException: Connection refused
Code vom Client:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
try { RMISecurityManager sm=new RMISecurityManager(); System.setSecurityManager(sm); Registry registry=LocateRegistry.getRegistry(ip,port); System.out.println("Registry Remote obj: "+registry.list()[0]); serverInterface server=(serverInterface)registry.lookup(registry.list()[0]); System.out.println(server.method()); } catch (Exception ex) { System.out.println(ex); }
Bin da mitlerweile total ratlos !
Wo kommt die 127.0.0.2 her? in der /etc/hosts steht nix davon.
So erstmal erschlagen mit Fragen, Vermutungen und Code, bitte bitte, hat jemand ne Idee? Oder einen Vorschlag?Geändert von zerrome (08.11.07 um 10:55 Uhr)
-
08.11.07 12:22 #2_jsd_ Tutorials.de Gastzugang
hi,
aus dem titel entnehme ich das du über irgendeine externe verbindung gehst...
1.) es stehen nur locale addressen in deinen fehlermeldungen...?
2.) rmi kommt durch eine firewall nicht ohne weiteres durch, es muß über die 80 oder wie auch immer expliziet getunnelt werden ( rmi verwendet dynamische ports)...bzw zum testen mal die firewalls ausschalten...
hoffe dir hilft das weiter...
-
08.11.07 13:09 #3
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
wenn du mehrere Netzwerk Interfaces in deinem rechner hast musst du der RMI Runtime auch sagen welches es benutzen soll...
Schau mal hier:
http://www.tutorials.de/forum/java/2...-java-5-a.html
http://www.tutorials.de/forum/java/2...ipse-plug.html
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo,
danke für eure Antworten !
So habe nochmal etwas rumprobiert...
@ _jsd_ :Firewalls waren aus . Aber der server war nicht richtig ans Netzwerkinterface registriert,
hab ich geändert, allerdings ohne erfolg, also geht immer noch nicht...
Server Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
final int port=2000; try { RMISecurityManager sm=new RMISecurityManager(); System.setSecurityManager(sm); LocateRegistry.createRegistry(port); //erstellt registry an port Registry registry = LocateRegistry.getRegistry( "192.168.0.11",port); //bindung an netzwerk interface System.out.println("Registry Port: "+port); registry.rebind("Server",new server()); System.out.println("Remote obj: "+registry.list()[0]); } catch (RemoteException re) { System.out.println(re.getMessage()); }
ausgabe des Servers beim Start :
Code :1 2
Registry Port: 2000 Remote obj: Server
So wie ich das sehe registriert der Server sich richtig, auch das remote objekt erscheint in der registry...
@ Tom : Hatte mir vorher die tutorials schonmal angesehen... Erkenne da
keinen großen unterschied, außer dass du die registry nicht im programm erstellst, keine Security Manager nutzt und den Standart port der registry verwendest. (na ja schon paar unterschiede)
Wenn ich die Programme lokal laufen lasse, gehts ja auch. Nur über netzwerk nicht... und die komische Fehlermeldung mit der 127.0.0.2 ist mir ein rätsel, weil wenn der Server nicht läuft, "wechselt" die fehlermeldung zur richtigen ip also 192.168.0.11 (siehe vorheriger post)
-
08.11.07 14:50 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
wenn du dir auch mein zweites Beispiel angeschaut hättest, hättest du gesehen das ich dort auch eine RMIRegistry programmatisch starte...
Weiterhin liegt dein Fehler immer noch daran, dass du deine RMIRegistry auf einem anderen Interface laufen lässt (intern) als das das von Client Verbindungen benutzt wird (extern).
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hi,
äh da komm ich nicht ganz mit... also ich dachte mit dem Befehl :
LocateRegistry.createRegistry(port);
erstellt man eine RMIRegistry auf besagtem port.
Dann mit :
registry = LocateRegistry.getRegistry( "192.168.0.11",port);
die Bindung an das interface.
Danach registrieren des objekts...
Könntest du vielleicht bischen code Posten, um mir zu zeigen wo der fehler liegt?
Stimmt bei dem zweiten beispiel startest du die RMIRegistry im Programm...
-
08.11.07 18:50 #7_jsd_ Tutorials.de Gastzugang
hi,
kannst mal bitte genauer beschreiben welcher rechner wo läuft ( network) und wo die registry läuft und wer nun von außen nach innen und umgedreht muß....
@thomas...es ist eigentlich nicht notwendig rmi das zu benutzende interface zu zu weisen, da das os das richtige sucht...
@zerrome...wenn du über externes netz gehst mußt du portforwarding machen, und das ist bei rmi ohne tunnel bescheiden, da es dynamische ports nutzt ( nicht für registry aber fürs remoteobject)...hast du vieleicht mal dran gedacht vpn zu nutzen da ersparst dir arbeit...und ist sicherer
hmf
-
Hallo,
danke dass Ihr da am Ball bleibt.
Also, auf beiden Rechnern läuft linux opensuse.
Beide sind mit Wlan und Dlink Router im Netzwerk. Der eine Rechner allerdings mit
ndiswrapper und dem Windows Treiber, macht aber soweit keine Probleme.
Beide Firewalls sind aus, IP des einen Rechner ist 192.168.0.11 (Server Programm) und die IP des anderen ist 192.168.0.112 (Client). Beide rechner erreichen sich mit ping. Ganz normales lokales Netzwerk (allerdings halt Wireless...).
Der Server erstellt die Registry, im Programm, diese läuft auch weil wenn ich sie per hand z.B. mit "rmiregistry 2000" starten will geht das nicht mehr, weil das Programm schon mit der software rmiregistry dann auf dem port läuft, soweit ja auch ok.
Ich kann auch mit der Client Software den Namen des Remote objekts an der Registry erfragen mit dem Befehl "registry.list()[0]"... nur die Verbindung klappt nicht, zum verzweifeln !!
Nur damit ich den Ablauf verstehe,
1. Server Erstellt Registry die auf nem Port lauscht
2. Server meldet sich an der Registry an
3. Server meldet Remote Objekt an der Registry an
4. Client meldet sich an der Entfernten Registry an
5. Client holt sich daraus Remote Objekt
dann sollte die Verbindung stehen oder?
Bei Punkt 5 geht bei mir auf jeden fall nix mehr...
-
08.11.07 20:57 #9_jsd_ Tutorials.de Gastzugang
hi,
geht also doch übers lokale lan...
versuche malCode :1
Naming.lookup( "host:2000/name");
auf http://www.gossi23.de/jsd/ gibts ein RMI/CORBA TestTool das brauch im ClassPath nur das Interface des Servers...damit kannst du mal versuchen ob klappt...das ding hat auch nen nameserviceadministrator...wenns dann immer noch nicht geht...post mal bitte den kompletten quellcode oder stell ihn als download zur verfügung
hmf
-
So,
habs nochmal mit :
Code :1
serverInterface server= (serverInterface)]Naming.lookup("//192.168.0.11:2000/Server");
probiert, geht nicht... gleiche Fehlermeldung beim Client wie vorher auch schon immer:
Code :1 2
java.rmi.ConnectException: Connection refused to host: 127.0.0.2; nested exception is: java.net.ConnectException: Connection refused
hab mir das test Tool mal angeschaut, findet beim Client erstellen das Server Interface nicht, wo soll das hin, damit der das findet?
Mir ist nicht ganz klar wie ich da den Pfad angeben soll ...
Code :1
java -classpath .;{$libs} -jar jTestTool.jar -v
Als Anhang mal beide Programme...
Danke im Vorraus
-
08.11.07 22:11 #11_jsd_ Tutorials.de Gastzugang
hi,
windows
Code :1
java -classpath .;[pfad zu deinem projekt] -jar jTestTool.jar -v
linux
Code :1
java -classpath .:[pfad zu deinem projekt] -jar jTestTool.jar -v
ich schau mir deinen code mal an...
-
08.11.07 22:41 #12_jsd_ Tutorials.de Gastzugang
hmm, also bei mir funktioniert alles anstandts los....
aber als kleinen tip, klassen namen werden bei java groß geschrieben und das default package sollte man nicht verwenden...
schau nochmal richtig das die firewall aus ist, die policies passen und die rechner erreichbar sind...
hmf
-
Hi,
Verdammt !! Sowas hab ich mir gedacht,die linux Rechner haben irgendwie ein Problem... aber echt seltsam, weil Netzwerkdrucken über cups geht , nfs Freigaben gehn nur nix rmi, na ja auf jeden fall mal vielen Dank für die Mühe... ist dann wohl ein Netzwerk Problem...
-
09.11.07 20:44 #14_jsd_ Tutorials.de Gastzugang
hi,
hat mit linux nicht wirklich was zu tun, habe debian
gruß
-
So,
lag dann echt irgendwie am Netzwerk...
Habe jetzt RMI mit Custom RMIServerSocketFactory am laufen, im Netzwerk!!
Ist ganz ok, weil man die Ports bestimmen und auf die Sockets einfluss nehmen kann...
Ist auch nicht so viel mehr Aufwand, aber kennt jemand spezielle Nachteile zufällig
Na ja bin erstmal froh das es läuft...
Danke nochmal.
Ich stehe auch gern für Fragen bereit...
Grüße Zerrome
Ähnliche Themen
-
TCPListener Probleme im Netzwerk, aber lokal geht
Von Vlami im Forum .NET Web und KommunikationAntworten: 7Letzter Beitrag: 18.03.10, 10:36 -
Freigabe einer externen Festplatte über das Netzwerk funktioniert nicht
Von killkrog im Forum HardwareAntworten: 9Letzter Beitrag: 13.07.07, 13:30 -
Internet über Router geht manchmal nicht, Netzwerk schon
Von Dj Mike im Forum NetzwerkeAntworten: 1Letzter Beitrag: 12.02.07, 21:30 -
Netzwerk über DSL-Router funktioniert nicht
Von andi73 im Forum NetzwerkeAntworten: 8Letzter Beitrag: 29.10.04, 16:57 -
Internetfreigabe über Netzwerk,Client zeigt einige Webseiten nicht an
Von Spartakusss im Forum Internet, DSL & FlatrateAntworten: 4Letzter Beitrag: 24.01.04, 22:54





Zitieren

Login





