RMI Einstellungen für "übers Internet"

Network

Top Contributor
Guten Tag,

ich habe ein Programm mit RMI geschrieben. Im Grunde genommen macht es nur ein Test-Ping.

Im eigenen Netzwerk hat es geklappt gehabt, indem ich mich von meinem Standcomputer zu meinem Laptop(WLan) verbunden habe und zurück. Erfolgreich.

Jetzt würde ich das ganze gerne übers Internet versuchen...
Ich verstehe bei all den Google-Ergebnissen jedoch nicht was jetzt genau Sache ist bzw. was man denn jetzt genau noch tun muss damit das ganze übers Internet funktioniert!
Einen ersten Test mit einem Bekannten habe ich bereits gemacht, jedoch kam da beim ersten Test eine RemoteException.

Beide Computer waren dabei in einem Netzwerk hinter einem Router.
Der Router in dessen Netzwerk die Serversoftware läuft, leitet den Port 1099 an den entsprechenden Computer weiter (TCP), sowohl öffentlich als auch privat.

Die Frage ist jetzt besonderst:
1. Muss der Computer mit der Clientsoftware auch den Port 1099 freigeben? Oder irgendetwas anderes zusätzlich machen.
2. Was muss ich noch machen?
3. In meinem Router kann ich für das Portforwarding ein Protokoll einstellen... richtiger Port? richtiges Protokoll?

Also einfach allgemein, was muss man alles unbedingt machen, damit es über das Internet funktioniert?
Die Ergebnisse bei Google finde ich seeeehr widersprüchlich teils.

Vielen Dank schonmal

Gruß
Netzwork
 
T

tuxedo

Gast
Sofern du keine Callbacks benutzt, reicht es am Server Port 1099 per PortForwarding im Router freizugeben.

Wenn du Callbacks benutzt: Tja, Schade. Dann wird's echt kompliziert. Kannst ja mal in meine Signatur schauen wieso das so ist.

- Alex
 

Network

Top Contributor

Danke, das habe ich selbstverständlich auch auf meinen Recherchen im Internet gefunden ;)
Dadurch, dass der Autor Client und Server im selben Punkt behandelt ist leider oft nicht klar, wovon er überhaupt gerade spricht/schreibt.
1. Punkt: Portforwarding: Auch beim Clienten?
4. Punkt: Was ist Unicast erforderlich? Ich will nur eine Methode beim Server aufrufen.
6. Punkt: (veraltet)
7. Punkt: Welche IP? "your-external-IP" beschreibt nicht im geringsten ob die Server, Client oder beide IP(s) gemeint ist/sind.

Und da man an Punkt 6 erkennt, dass es sich noch um ein altes Tutorial handelt bzw. es sich über die alte RMI-Technologie handelt: Sind manche Punkte überhaupt noch notwendig?

Sofern du keine Callbacks benutzt, reicht es am Server Port 1099 per PortForwarding im Router freizugeben.

Wenn du Callbacks benutzt: Tja, Schade. Dann wird's echt kompliziert. Kannst ja mal in meine Signatur schauen wieso das so ist.

- Alex

Naja das Programm scheitert bereits daran überhaupt die RMI-Registry zu finden -> RemoteException.
Wenn du mit deiner Signatur dieses "SIMON" meinst, dann beantwortet das ganz genau meine Hintergrundfrage warum RMI (das ja mit TCP läuft) nicht genauso einfach wie TCP ist!
Wobei auch SIMON ein paar Nachteile hat, wenn ich das richtig herauslese, gegenüber RMI(<-seit dem letzten Update).
Abgesehen von dem sehr hohen Preis.

Ich denke dann heißt es wohl: Hat sich was mit dem sonst so schön einfachen RMI. Vieleicht schafft es ja mal Oracle, RMI in 21. Jahrhundert zu verfrachten.


Vielen Dank
Ich werde das Thema als "Gelöst" markieren, wenn sonst noch jmd. etwas hat, kann er/sie es aber gerne hier reinschreiben.
 
M

Marcinek

Gast
Verstehe nicht, warum man sowas altes, wie RMI nutz.

Wieso nicht Webservices oder EJB?
 
T

tuxedo

Gast
Zu deinen Fragen:
1. Punkt: Portforwarding: Auch beim Clienten?

Nur wenn du Callbacks benutzt. Und dann brauchst du noch eine SocketFactory mit der du den Rückwärtskanal-Port vordefinierst und somit überhaupt eine Chance hast Portforwarding für den Client einzurichten.

Mit Simon ist Portforwarding nur beim Server nötig (sofern der an einem Router hängt). Beim Client: Absolut unnötig, selbst mit Callbacks.

4. Punkt: Was ist Unicast erforderlich? Ich will nur eine Methode beim Server aufrufen.

Hab den Link nicht gelesen. Aber TCP = Unicast. Und da RMI nur TCP nutzt: Jepp, Unicast.

7. Punkt: Welche IP? "your-external-IP" beschreibt nicht im geringsten ob die Server, Client oder beide IP(s) gemeint ist/sind.

Hirn einschalten ;-) Was für Adressen hast du? Die im lokalen Netzwerk (jeweils am Server und an Client, überlicherweise im Muster mit 192.168.x.y) und die jeweils "externen" und gleichzeitig "offiziellen" IPs du die bei der Einwahl ins Internet bekommen hast. Und auch hier: Jeweils am Server und am Client. Die jeweilige externe IP ist nur am Router brauchbar. D.h. ein Verbindungsaufbau zu dieser IP geht erstmal an den Router. Hat der Portforwarding für einen speziellen Port konfiguriert, geht's weiter ins lokale Netzwerk zur Client oder Serverapplikation.

Mir scheint du musst dich in das Thema erst noch einlesen. Und ehrlich gesagt wundert's mich dann nicht dass du mit RMI aneckst.

Wenn du mit deiner Signatur dieses "SIMON" meinst, dann beantwortet das ganz genau meine Hintergrundfrage warum RMI (das ja mit TCP läuft) nicht genauso einfach wie TCP ist!

Kann ich nicht nachvollziehen. TCP gibts nicht in einfach oder kompliziert. TCP ist TCP. Fertig.
Das was du vielleicht mit "TCP" meinst ist die Socketkommunikation mit Java mit den Input und Outputstreams. Lässt man mal das eigene Protokol ausser acht: Ja, damit hast du sehr zügig einen String von A nach B übertragen.

Im Fall vom RPC ist das eben etwas aufwendiger. Zumindest was im Hintergrund passiert. Bei RMI ist der Aufwand auch im Vordergrund sichtbar. Bei SIMON ist das marginal. Das Beispiel hier ist wirklich nicht sinderlich schwierig und sollte unter der Vorraussetzung dass man weiß wie man den Classpath einstellt, was Interfaces sind und wozu sie da sind sowie Portweiterleitung konfigurieren kann, binnen 5 Minuten über's Internet laufen: SIMON - Sample helloworld110 - root1.de - Software Engineering

2 Zeilen Code für den Verbindungsaufbau beim Client und ebenso 2 Zeilen Code um den Server übers Netz erreichbar zu machen. Von da an geht's in gewohntem objektorientierten Stil weiter. Von Netzwerk und RPC ist nichts mehr zu sehen/spüren. Was will man mehr???

Bei RMI musst du jeden Remote-Call mit try/catch umwickeln, Callbacks machen über's Internet massiv Probleme, man muss sich mit dem SecurityManager herumärgern, die Sache mit der Codebase gebacken kriegen, .... Hast du alles mit SIMON nicht. Einrichten und läuft. Nicht umsonst berichten User von einem schnellen und unkomplizerten Umstieg zu SIMON.

Wobei auch SIMON ein paar Nachteile hat, wenn ich das richtig herauslese, gegenüber RMI(<-seit dem letzten Update).

Wo hast du das heraus gelesen? Ich weiß von nix.
Guckst du nochmal hier: SIMON - Start - root1.de - Software Engineering
Sowie hier: SIMON - Start - root1.de - Software Engineering

Abgesehen von dem sehr hohen Preis.

Kostenlos für GPL kompatible Software ist nicht wirklich teuer. Und 79EUR im kommerziellen Fall für einen Entwickler für die unbegrenzte Nutzung in kommerziellen Projekten kann man auch nicht wirklich teuer nennen. Eher ein "Schnäppchen". Kannst ja mal ausrechnen was es kostet etwas Vergleichbares zu entwickeln. Da bist du deeeuuuutlich über 79EUR, selbst wenn du nur einen Fachinformatiker-Stundenlohn ansetzt.
Und wenn du etwas vergleichbares im Netz findest, das sich kostenlos kommerziell nutzen lässt: Ich bin gespannt...

Ich denke dann heißt es wohl: Hat sich was mit dem sonst so schön einfachen RMI. Vieleicht schafft es ja mal Oracle, RMI in 21. Jahrhundert zu verfrachten.

Wenn du meinst. JBoss und Co. nutzen seit Jahren RMI sehr erfolgreich mit Remote-EJBs. Und das auch noch in der neusten Version. Und aller vorraussicht nach wird sich das auch nicht so schnell ändern. Von daher: RMI ist bereits im 21. Jahrhundert und wird gerne und oft genutzt.

Und wer's nicht mag: Es gibt ja Alternativen die die Komplexität von RMI sehr gut umgangen haben.

In diesem Sinne,
'nen Schönen Abend noch.

Gruß
Alex
 
T

tuxedo

Gast
Verstehe nicht, warum man sowas altes, wie RMI nutz.

Wieso nicht Webservices oder EJB?

Remote EJBs werden mit RMI realisiert. :toll: Webservices sind nicht für alles eine performante Lösung.

Unterschiedliche Anforderungen erfordern unterschiedliche Lösungen. RMI ist nach wie vor eine gültige und taugliche Lösung für die eine oder andere Anforderung. Von daher: Wer's braucht nutzt, wer nicht, nimmt was anderes.
 

Network

Top Contributor
Hirn einschalten ;-) Was für Adressen hast du? Die im lokalen Netzwerk (jeweils am Server und an Client, überlicherweise im Muster mit 192.168.x.y) und die jeweils "externen" und gleichzeitig "offiziellen" IPs du die bei der Einwahl ins Internet bekommen hast. Und auch hier: Jeweils am Server und am Client. Die jeweilige externe IP ist nur am Router brauchbar. D.h. ein Verbindungsaufbau zu dieser IP geht erstmal an den Router. Hat der Portforwarding für einen speziellen Port konfiguriert, geht's weiter ins lokale Netzwerk zur Client oder Serverapplikation.

Mir scheint du musst dich in das Thema erst noch einlesen. Und ehrlich gesagt wundert's mich dann nicht dass du mit RMI aneckst.

Natürlich, wie offensichtlich, entschuldige(Das ist nicht ironisch gemeint). In einem anderen Text bzw. Google-Ergebniss war die Rede davon, dass man dem Server die Client-IP schicken muss (ohne Quellcodeangabe)... ich hatte irgendwie nicht damit gerechnet, dass das ganze einfach so umgesetzt wird.

Kann ich nicht nachvollziehen. TCP gibts nicht in einfach oder kompliziert. TCP ist TCP. Fertig.
Das was du vielleicht mit "TCP" meinst ist die Socketkommunikation mit Java mit den Input und Outputstreams. Lässt man mal das eigene Protokol ausser acht: Ja, damit hast du sehr zügig einen String von A nach B übertragen.

Tatsächlich hatte ich mit dem Satz länger herumgespielt und war bis zum Schluss unzufrieden mit der Formulierung. Aber das wesentliche hast du ja verstanden.

Im Fall vom RPC ist das eben etwas aufwendiger. Zumindest was im Hintergrund passiert. Bei RMI ist der Aufwand auch im Vordergrund sichtbar. [...] binnen 5 Minuten über's Internet laufen: SIMON - Sample helloworld110 - root1.de - Software Engineering

2 Zeilen [...]. Was will man mehr???

Ok klingt interessant. (Wobei Zeilen noch nie ein Argument für den Compiler waren ;)).

Bei RMI musst du jeden Remote-Call mit try/catch umwickeln, Callbacks machen über's Internet massiv Probleme, man muss sich mit dem SecurityManager herumärgern, die Sache mit der Codebase gebacken kriegen, .... Hast du alles mit SIMON nicht. Einrichten und läuft. Nicht umsonst berichten User von einem schnellen und unkomplizerten Umstieg zu SIMON.

Wo hast du das heraus gelesen? Ich weiß von nix.
Guckst du nochmal hier: SIMON - Start - root1.de - Software Engineering
Sowie hier: SIMON - Start - root1.de - Software Engineering

Die try/catch Blöcke sind sehr angenehm (Beim disconnect jedoch umständlich) um herauszufinden ob eine Verbindung unterbochen wurde.
Der SecurityManager ist bei RMI nach meiner Beurteilung jedoch sehr wichtig und sowohl auch nicht Pflicht um ein funktionierendes Programm zu schreiben.

Die SIMON Vorstellung (Signatur) wirkte scheins beim ersten mal etwas komplizierter als sie ist.
Jetzt kribbelts schon, weil ich austesten will was passiert wenn man kein nameLookup.release(server) macht!
Bei RMI hat das ja der UnicastRemoteExtend geregelt.

Kostenlos für GPL kompatible Software ist nicht wirklich teuer. Und 79EUR im kommerziellen Fall für einen Entwickler für die unbegrenzte Nutzung in kommerziellen Projekten kann man auch nicht wirklich teuer nennen. Eher ein "Schnäppchen". Kannst ja mal ausrechnen was es kostet etwas Vergleichbares zu entwickeln. Da bist du deeeuuuutlich über 79EUR, selbst wenn du nur einen Fachinformatiker-Stundenlohn ansetzt.
Und wenn du etwas vergleichbares im Netz findest, das sich kostenlos kommerziell nutzen lässt: Ich bin gespannt.

Heut hab ich auch irgendwie das Ass in Lesen und Schreiben gezogen... Keine Ahnung wie ich auf zu teuer kam. Das ist wohl der Zeitpunkt zu realisieren für heute schluss zu machen und sich schlafen zu legen.

Wenn du meinst. JBoss und Co. nutzen seit Jahren RMI sehr erfolgreich mit Remote-EJBs. Und das auch noch in der neusten Version. Und aller vorraussicht nach wird sich das auch nicht so schnell ändern. Von daher: RMI ist bereits im 21. Jahrhundert und wird gerne und oft genutzt.

Und wer's nicht mag: Es gibt ja Alternativen die die Komplexität von RMI sehr gut umgangen haben.

Ich war kurz davor in Richtung SIMON zu gehen, plötzlich fällt hier ein altbekannter, oft gehörter und nie wirklich realisierter Begriff... EJB! Der Moment wo einem die ganzen Situationen durch den Kopf gehen in denen EJB eig. eine relativ wichtige Rolle spielte.
Wenn ich meine Erinnerungen richtig interpretiere, soll EJB jedoch relativ (für den Anfang) kompliziert sein.
Der Moment in dem einem klar wird, dass man sich mal wieder durch intensive Recherchen die Unterschiede klar herausarbeiten muss und welche Umsetzung sich dann lohnt.
Der Moment in dem einem klar wird was für eine Aufgabe man vor sich hat ;)


Bin auf lokale Programmierung spezialisiert und habe daher solche Programmlösungen in dem Sinne auch immer nur für solche Zwecke missverwendet, deshalb meine recht hohen und fehlgeleiteten Erwartungen an die Simplizität einer solchen Umsetzung.

Ich bedanke mich an der Stelle nochmal recht herzlich, für die sehr kompetente und hilfreiche Antwort. Sowie für die Geduld für jmd. für den die Komplexität des Internets einfach kein Sinn ergibt...

Gruß
 

Network

Top Contributor
Verstehe nicht, warum man sowas altes, wie RMI nutz.

Wieso nicht Webservices oder EJB?

RMI kann man in lokalen Anwendungen sowie in einem Eigen-Netzwerk sehr gut verwenden um viele Probleme sicher zu lösen, und ist dabei auch sehr schnell geschrieben!

Da bin ich von der Vermutung ausgegangen und Hoffnung, dass das auch so fürs Internet funktioniert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Proxy Einstellungen auslesen Netzwerkprogrammierung 2
B Die IPv4 Einstellungen ändern (Windows 7) Netzwerkprogrammierung 9
K Windows TCP/IP Einstellungen ändern Netzwerkprogrammierung 4
M herausbekommen, ob IP Einstellungen von DHCP Server Netzwerkprogrammierung 8
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
FrankenDerStein Socket UDP Multithreading für ein Port Netzwerkprogrammierung 2
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
B Webview für Anwendung Netzwerkprogrammierung 7
M Sicheres Login-System für App implementieren Netzwerkprogrammierung 6
J Netty umsetzung für ein Protokoll Netzwerkprogrammierung 1
J ERM für kleine Verwaltungsdatenbank Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
Messoras Launcher für mein Spiel Netzwerkprogrammierung 7
F Einfaches Gateway für Log-Files Netzwerkprogrammierung 1
P RMI - Neue eigene Instanz für jeden Aufruf auf nicht serialisierbares Objekt - wie? Netzwerkprogrammierung 0
P PPTP Protokoll für JAVA Netzwerkprogrammierung 14
T FTP Wie Notwendigkeit für "rekey" klientenseitig detektieren? Netzwerkprogrammierung 3
S Webserver für Jar File Netzwerkprogrammierung 4
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
M Erreichbar für alle zu sein Netzwerkprogrammierung 9
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
N Selbes URL Objekt für alle Requests nutzen Netzwerkprogrammierung 7
T uberspace.de als (v)root-Ersatz für kleinere Java-Anwendungen? Netzwerkprogrammierung 12
L Proxy für Dateidownload? Netzwerkprogrammierung 3
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Leitstelle für Funkspiel Netzwerkprogrammierung 8
F Java-Beispielcode für Zeroconf (ähnlich Apple Bonjour) Netzwerkprogrammierung 7
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
F SSL-Zertifikate für viele Nutzer? Netzwerkprogrammierung 8
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
S wie stell man die classpath für JARs? Netzwerkprogrammierung 3
M Bestimmte Klassen für Netzwerkchecks gesucht Netzwerkprogrammierung 11
M ClassLoader für Axis2 setzen Netzwerkprogrammierung 15
M Welches Speicherformat für News-Database?? Netzwerkprogrammierung 2
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
P Proxy für Anwendung setzten Netzwerkprogrammierung 3
T Bezeichner "end of line" für die Funktion readline Netzwerkprogrammierung 5
A DataGramsocket Übertragungsproblem im Internet (IPs für Voip) Netzwerkprogrammierung 5
E Userliste für Chat Applet Netzwerkprogrammierung 4
S HTTP Kleines Programm für den Routerneustart Netzwerkprogrammierung 3
L Zeitspanne für erneutes senden Netzwerkprogrammierung 16
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
F Netzwerkprogrammierung für Anfänger Netzwerkprogrammierung 2
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
B Variablen ausrichten für Übertragung Netzwerkprogrammierung 2
D FTP Pfadangabe für ftp-upload funktioniert nicht Netzwerkprogrammierung 5
K Getrennte Rechner für RMI-Server/RMI-Registry, bzw. Alternativen? Netzwerkprogrammierung 5
dayaftereh HTTPCleint und HTMLparser für hTTpBot Netzwerkprogrammierung 2
E Socket Client-Applikation mit GUI für Internet IO-Platine Netzwerkprogrammierung 2
0din Grundlage für Bluetooth Netzwerkprogrammierung 5
N "Jungfernflug" der Socketprogrammierung für ein Mühlespiel Netzwerkprogrammierung 8
F Empfehlung für embedded Webserver Netzwerkprogrammierung 10
W Bibliothek für Certificate Management Protocol (CMP) Netzwerkprogrammierung 3
O Client/Server für Ticker Netzwerkprogrammierung 2
J Stubs für SOAP-Webservice generieren. Ich bekomme es einfach nicht hin... Netzwerkprogrammierung 3
dayaftereh Bester Stream für ein Spiel? Netzwerkprogrammierung 15
data89 Sockets: ein alter Hut - für Euch - für mich nicht! Netzwerkprogrammierung 10
G FileDialog für FTP Client Netzwerkprogrammierung 2
P Welches Protokoll für RMI verwenden? Netzwerkprogrammierung 10
H RCON Tool für Gameserver Netzwerkprogrammierung 11
A Wichtig für einen Chat? Netzwerkprogrammierung 4
D Was für Verbindungen mit Socket möglich? Netzwerkprogrammierung 2
S Realisierung eines Netzwerkcodes für ein Strategiespiel Netzwerkprogrammierung 7
G Datagram-Sockets für UDP-Kommunikation Netzwerkprogrammierung 2
W Was für ein Stream soll ich verwenden? Netzwerkprogrammierung 8
A Rezept für Webservices Netzwerkprogrammierung 5
I unc pfad für die klasse file? Netzwerkprogrammierung 4
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
T Filter für Input UND OutputStream Netzwerkprogrammierung 4
T Welches Netzwerk ist am bestern für. Netzwerkprogrammierung 2
G server für mein spiel. Netzwerkprogrammierung 5
M Log In Programm für Seiten Netzwerkprogrammierung 2
G Netzwerkprogrammierung für spiele Netzwerkprogrammierung 2
A IRC-Server für das lokale Netzwerk? Netzwerkprogrammierung 12
C Einfacher Filedownload mit Sockets geht nicht für pdffiles Netzwerkprogrammierung 16
S Server für Internetspiel Netzwerkprogrammierung 2
G Objecte für Kommunikation nutzen Netzwerkprogrammierung 2
J Java Programm für Upload von Dateien per HTTP Netzwerkprogrammierung 7
S Voreinstellungen für JavaMail Netzwerkprogrammierung 2
S Idee für Projekt auf Agentenbasis Netzwerkprogrammierung 8
S Suche API für einfachen HTTP-Zugriff. Netzwerkprogrammierung 17
G benötige Beispiel für parallel ablaufende Threads Netzwerkprogrammierung 3
M RMI - Ein Objekt für Alle? Netzwerkprogrammierung 5
Z Protokoll für Schiffeversenken Netzwerkprogrammierung 5
T Kann man jeden Port für Programm verwenden? Netzwerkprogrammierung 2
R proxy für java anwendung angeben [resolved] Netzwerkprogrammierung 15
B Wie Router einstellen für CLient-Server-Programm? Netzwerkprogrammierung 4
R PPTP Protokoll für JAVA Netzwerkprogrammierung 3
Icewind Klasse für DNS Anfragen Netzwerkprogrammierung 14
P Welche Art von Sockets für ein Spiel? Netzwerkprogrammierung 3
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
M Ausgangsport für FTp-Connection festlegen??? Netzwerkprogrammierung 3
D beste Methode für Datenübertragung ? Netzwerkprogrammierung 1
I ActiveMQ-Messages übers Netzwerk Netzwerkprogrammierung 13

Ähnliche Java Themen

Neue Themen


Oben