Java Internetserver

Status
Nicht offen für weitere Antworten.

scaary

Bekanntes Mitglied
Hi.
Ich habe mich jetzt mal auf vollkommenes Neuland begeben und mit der Programmierung eines kleinen Servers "begonnen" (eigentlich hab ich nur das Beispiel eines Buches durchgearbeitet, damit ich erstmal ein Verstaendnis fuer die Materie erhalte).

Hier die Seite:

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 19.3 Auf der Serverseite

Die Idee dahinter, eine Entfernte Methode so zu nutzen, als ob sie Lokal waer, gefaellt mir sehr gut!

Jetzt hab ich nur noch eine Frage zu folgendem Code:

SERVER
Java:
package Testserver;

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

public class Server { 
	public static void main( String[] args ) throws RemoteException 
	{ 
		LocateRegistry.createRegistry( Registry.REGISTRY_PORT ); 

		AdderImpl adder = new AdderImpl(); 
		Adder stub = (Adder) UnicastRemoteObject.exportObject( adder, 0 ); 
		RemoteServer.setLog( System.out ); 

		Registry registry = LocateRegistry.getRegistry(); 
		registry.rebind( "Adder", stub ); 

		System.out.println( "Adder angemeldet" ); 
	} 
}

CLIENT
Java:
package Testserver;

import java.rmi.NotBoundException; 
import java.rmi.RemoteException; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
 
public class Client 
{ 
  public static void main( String[] args ) throws  RemoteException, NotBoundException 
  { 
    Registry registry = LocateRegistry.getRegistry(); 
    Adder adder = (Adder) registry.lookup( "Adder" ); 
    System.out.println( adder.add( 46, 115 ) ); 
  } 
}

Wo genau geb ich dann meine URL ein, wo der Client drauf zugreifen soll (also www.wasweissich.de)?

Einer von den beiden muss die doch kriegen!

Ich geh mal davon aus, dass ich die dem CLient uebergeben muss, und der server das ganze durch ein einfach portforwarding weitergeleitet bekommt, gell?

Danke!
 
T

tuxedo

Gast
RMi, Portforwarding etc... Sehr böse. Geht prinzipiell, aber kann große Probleme machen.

Aber mal davon abgesehen: Die URL (kein "www . xyz . de" sondern das was die die Java-Insel vorschreibt: rmi:// ...) musst du bei "lookup()" angeben. Aber das sollte auch in der Insel stehen.

RMI "Hello World" Beispiele gibts zu hauf im Netz und auch hier im Forum. Einfach mal googeln.

- Alex
 
Zuletzt bearbeitet von einem Moderator:

scaary

Bekanntes Mitglied
Ahh, ok, vielen Dank.

Jetzt weiss ich zumindest wonach ich suchen muss!

Also sprich, ich muss mir keine eigene Adresse zulegen, sondern der Server meldet sich selbststaendig im Internet mit einer von mir vorgegebenen adresse an?

Steht bestimmt auch in der Insel und ich habs nur ueberlesen.

Ich lerne leider nicht so gut aus buechern, sondern such mir meistens ein Beispiel und nehm das auseinander.

Danke ^^
 
Zuletzt bearbeitet:

scaary

Bekanntes Mitglied
Wenn ich den dann nochmal ei ne Frage stellen darf;

Ist es richtig, dass sowohl Server als auch Client die Classe benoetigen die die Methode zum ausfuehren der (z.B.) Berechnung benoetigt?

Braeuchten also beide diese Klasse:

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

public interface Adder extends Remote { 
  int add( int x, int y ) throws RemoteException; 
}

Und zusaetzlich braucht der Server noch das Interface des adders, richtig?
 
T

tuxedo

Gast
Umgekehrt. Alle brauchen das Interface und der Server braucht noch dessen implementierung. Dem Client reicht das Interface.

- Alex
 

scaary

Bekanntes Mitglied
Ahh, ich verstehe.

Gibt es denn ne alternative zu RMi (da du das als "boese" bezeichnet hast)?

Ich hab prinzipiell nur nen server, der auf die Anfrage eines Clients vorgegeben reagieren muss.

Das Reagieren sieht so aus, das er ne List reinbekommt, mit daten, die benoetigt werden, und die daten gibt er dann zurueck.

Allerdings sind zwei anfragen fuer zwei vollkommen verschiedene Datensaezte moeglich!

Meinst du, das amcht sinn das hiermit zu implementieren?

Mir hat es halt gut gefallen, dass ich "direkt" auf Methoden zugreifen kann.

Ahja, und wenn ich zwei methoden registrieren will, :
Java:
		LocateRegistry.createRegistry( Registry.REGISTRY_PORT ); 

		AdderImpl adder = new AdderImpl(); 
		Adder stub = (Adder) UnicastRemoteObject.exportObject( adder, 0 ); 
		RemoteServer.setLog( System.out ); 

		Registry registry = LocateRegistry.getRegistry(); 
		registry.rebind( "Adder", stub );

Reicht es da, nur folgenden ausschnitt zu benutzen:
Java:
		AdderImpl adder2 = new AdderImpl(); 
		Adder stub = (Adder) UnicastRemoteObject.exportObject( adder2, 0 ); 
		RemoteServer.setLog( System.out ); 

		Registry registry = LocateRegistry.getRegistry(); 
		registry.rebind( "Adder2", stub );
 
Zuletzt bearbeitet:
T

tuxedo

Gast
1) Du solltest dringend mal ein RMI Tutorial anschauen. Für mehr als eine Remote-Methode brauchst du nicht mehrere Remote-Objekte. Da reicht i.d.R. eins. Mir scheint dir fehlt noch ein konkretes Verständnis wie RMI funktioniert. Da SIMON RMI sehr ähnlich ist, kannst du auch auf der SIMON Projektseite nachlesen wie das generell mit den entfernten Methodenaufrufen funktioniert.

2) RMI ist nur im Fall von Callbacks böse. Callbacks heisst: Der Client gibt dem Server ein Objekt mit, welches der Server nun benutzen kann um Methoden beim Client aufzurufen. Wenn du dein "Frage-Antwort-Spiel" allerdings nur in eine Richtung (Client->Server) betreibst und der Server nie von alleine den Client etwas fragen muss, dann ist RMI für deine zwecke wohl ausreichend.

Aber in der Tat gibt es alternativen die einem das Leben vereinfachen. Hier sei exemplarisch SIMON und Spring RPC genannt (Ein Blick auf meine Signatur und evtl. noch google hilft).

- Alex
 

scaary

Bekanntes Mitglied
Hiho :)

Ich habe mir jetzt zusaetzlich noch ein Tutorial durchgelesen und das Prinzipe soweit verstanden.
Hab ausserdem schon meinen eigenen Kleinen Server gebastelt, der auch ohne Probleme (auf dem selben PC) funktioniert.

Aber ich muss dich trotzdem nochmal nerven.

Ich verstehe nicht, wie ich dem Server eine adresse im Internet zuweisen kann. Wie sag ich ihm, auf welche adresse er hoeren muss, bzw wie er diese anmeldet?

Ich habs zwar gelesen, aber nicht verstanden... :(

danke!
 
T

tuxedo

Gast
Ich verstehe nicht, wie ich dem Server eine adresse im Internet zuweisen kann. Wie sag ich ihm, auf welche adresse er hoeren muss, bzw wie er diese anmeldet?

Gar nicht. Der Server muss diese Adresse "besitzen".

Beispiel:

Du startest den Server auf einem Rechner der an einem DSL-Router hängt. Dann kannst du als Adresse nur die IP des PCs angeben. Eben weil er nur auf diese lokal vorhandene Adresse binden kann und eine Netzwerkkarte besitzt die diese Adresse hat.

Du kannst nicht dem PC sagen: Binde dich an "meineDomain.de" wenn "meineDomain.de" nicht zu der IP aufgelöst werden kann die der Rechner tatsächlich besitzt.

Ergo: Du kannst nur die Adressen/IPs beim binden des Servers angeben die der Rechner auf tatsächlich an seinen Netzwerkkarten hat.

Vielleicht kommen wir weiter wenn du mal detailiert erklärst was du vor hast?!
 

scaary

Bekanntes Mitglied
Ahh.

Ok, dann ist das ganze gar kein problem :)

Ich dachte, sun haette irgendeine eigene Webserverdomain bei der man sich anmelden muss.
Habs einfach nur falsch verstanden :)

Was ich vorhab:

Ein Server bei mir, ein Cleint bei (was weiss ich).
Client fragt bei meinem Server das einige Dateien an, die werden an den Client geschickt. Fertig.

Mehr muss das ding ned koennen.

ergo reicht mir meine ganz normale IP adresse inkl portforwarding im router auf den serverrechner, gell?

Danke vielmals!
 

scaary

Bekanntes Mitglied
Heute morgen ist mir allerdings ein vermeindlicher gedankenfehler in einem teilstueck meines Codes beim Server aufgefallen:

Java:
	public File[] getFiles(Data[] DataList) {
		LinkedList<File> resultList = new LinkedList<File>();
		// Getting all the files of the requested datas
		for (int i = 0; i < DataList.length; ++i) {
			String[] folderPath= dataList[i].getsavedFilePath();
			File folder = new File(folderPath[0]);
			// Saving the folder in the returnList
			resultList.add(folder);
			File[] folderContent = folder.listFiles();
			for (int j = 0; j < folderContent.length; ++j) {				
				//saving all file sin the folder in the returnList
				resultList.add(folderContent[j]);
			}
		}
		// Transfoming the linkedList to an array.
		File[] result = new File[resultList.size()];
		for (int i = 0; i < resultList.size(); ++i) {
			result[i] = resultList.get(i);
		}
		return result;
	}

Hier speicher ich ja nur die Namen der einzelnen Dateien, nicht aber deren inhalt ¬>¬.

Gibt es eine elegante Loesung, wie ich den Inhalt gleich mit ueber das Internet verschicken kann?

Danke!
 

scaary

Bekanntes Mitglied
Ahh, vielen lieben Dank.

Aber mal rein zur Theorie:

Das ganze sind ja quasi nur entfernte Methoden, gell?

Wuerde daher auch folgende Funktion auf dem Server funktionieren, wenn sie vom Client aufgerufen wird:

Java:
	/**
	 * Return the content of a file in form of a String.
	 * @param file
	 * @return
	 * @throws IOException 
	 */
	public String requestFileContent(File file) throws IOException {
		return FileWorker.getFileContent(file);
	}

Java:
	/**
	 * Get text content from a file.
	 * 
	 * @param file
	 * @return
	 * @throws IOException
	 */
	public static String getFileContent(File file) throws IOException {
		String result = "";
		String tmp = "";
		reader = new BufferedReader(new FileReader(file));
		do {
			tmp = reader.readLine();
			if (tmp != null) {
				result = result + tmp;
			}
		} while (tmp != null);
		reader.close();
		return result;
	}

Danke schonmal :)

Ahja, und mit meiner adresse das War OK, gell? (sprich Oeffentliche IP anwaehlen und im Router Portforwarding, richtig?).

Vielen Dank nochmals fuer deine ganze Hilfe!
 
T

tuxedo

Gast
Das ganze sind ja quasi nur entfernte Methoden, gell?

Wuerde daher auch folgende Funktion auf dem Server funktionieren, wenn sie vom Client aufgerufen wird:

Du musst schon der Anleitung auf der verlinkten RMIIO Projektwebseite folgen. Einfach "wie bisher" eine File lesen und schreiben geht nicht.

Ahja, und mit meiner adresse das War OK, gell? (sprich Oeffentliche IP anwaehlen und im Router Portforwarding, richtig?).

Ja.

- Alex
 

scaary

Bekanntes Mitglied
Eine Frage haette ich noch:

Ich starte meinen Server:
Java:
	/**
	 * Starts the server
	 * @throws RemoteException
	 */
	public void startServer() throws RemoteException {
		LocateRegistry.createRegistry( Registry.REGISTRY_PORT ); 

		CreateRequestedListImpl adder = new CreateRequestedListImpl(); 
		CreateRequestList stub = (CreateRequestList) UnicastRemoteObject.exportObject(adder, 0 ); 
		RemoteServer.setLog( System.out ); 

		Registry registry = LocateRegistry.getRegistry(); 
		registry.rebind( "Adder", stub ); 

		System.out.println( "CreateRequestList angemeldet" ); 
	}

Gibt es auch eine Moeglichkeit, den Server anzuhalten?

Danke!
 
T

tuxedo

Gast
Einfache Frage, einfache Antwort: Ja.

Weiteres verrät dir die JavaDOC zu "Registry" und diverse Tutorials zu RMI, sowie die JavaInsel.

- Alex
 
T

tuxedo

Gast
Mach dir bitte gleich noch ne Haftnotiz an den Monitor: "Erst APIDOC durchschauen, dann JavaInsel durchwühlen, dann Forumsuche bemühen und dann erst Fragen wenn es denn noch notwendig ist." :D
 

scaary

Bekanntes Mitglied
*ggg*

Ob du es glaubst, ode rnicht, die Schritte hab ich durchgefuehrt :)

Es lag wirklich nicht an meiner Faulheit (Ehrenwort), ich hab alle durchgeschaut (bis auf die DOCApi, um ehrlich zu sein, da hab ich nicht dran gedacht).
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Alle Objekte die du als Methodenargumente übergibst oder als Return-Wert von einem Methodenaufruf erhälst müssen serialisierbar sein und demnach das Marker-Interface "Serializeable" implementieren.

Wenn die Exception immer noch kommt dann hilft erstmal nur der Stacktrace und ein nochmaliges Kontrollieren der Klassen-Signatur.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
LarsLovstrom ConcurrentHashMap in Java bei komplexen Objekten Netzwerkprogrammierung 2
D HTTP Apache-HttpClient/UNAVAILABLE (java 1.4) Netzwerkprogrammierung 18
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
M HTTP Let's Encrypt und Java Trust-Store Netzwerkprogrammierung 6
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
x46 Java SSLContext erstellen mit SSL-Zertifikat Netzwerkprogrammierung 1
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
V Browsergame mit Java(WebSocketServer) als Backend? Netzwerkprogrammierung 5
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Fragen zu Java Webservice mit Axis2 Netzwerkprogrammierung 0
M Mit Java Mail Mails an Webmailer schicken Netzwerkprogrammierung 1
mor16Euro HTTP Php website mit Java aktualisiern Netzwerkprogrammierung 6
T HTTP JAVA Browser Konsolenanfrage(JavaScript) Netzwerkprogrammierung 7
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
L Remote Desktop per Java steuern Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
J Webserver mit Java schreiben? Netzwerkprogrammierung 4
D JAVA RMI Netzwerkprogrammierung 1
K HTTP Mit Java HTML Codeauslesen um damit zu arbeiten Netzwerkprogrammierung 7
V Kann man mit Hilfe eines Java-Programms den Zugriff auf bestimmte Internetseiten verhinden? Netzwerkprogrammierung 3
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
A Bestimmter URL/Certificate per Java immer vertrauen (Trustmanager/HostnameVerifier) Netzwerkprogrammierung 1
T VPN-Verbindung über Java Netzwerkprogrammierung 4
M HTTP PATCH Request mit Java ausführen Netzwerkprogrammierung 2
Niggo_ Probleme mit Java Mail Netzwerkprogrammierung 14
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
L FTP Java Interpreter unterbindet SSL Handshake Netzwerkprogrammierung 2
C IFrame mit java auslesen Netzwerkprogrammierung 1
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
C Datensammlung mit Java RMI Netzwerkprogrammierung 0
K Java Jsoup : OnLoad Netzwerkprogrammierung 0
S Java Chat Server Netzwerkprogrammierung 8
Carres HTTP Vorhandenen Session-ID Cookie von Firefox, Chrome oder IE in Java verwenden Netzwerkprogrammierung 2
B Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen Netzwerkprogrammierung 1
Z HTTP HTML Element auslesen in Java Netzwerkprogrammierung 1
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
Thallius HTTP HTTPS unter Java 1.6 schlägt fehl Netzwerkprogrammierung 4
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
P Chat in Java Netzwerkprogrammierung 3
C java.net.ConnectException: Operation timed out? Netzwerkprogrammierung 2
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
T curl request in java umwandeln Netzwerkprogrammierung 4
M Socket Java Server: NullPointerException Netzwerkprogrammierung 4
J Java Server empfängt php inhalt nicht Netzwerkprogrammierung 1
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
L Java RMI Objekt konsistenz Netzwerkprogrammierung 1
H Portforwarding umgehen in Java? Netzwerkprogrammierung 5
D Response in Java Servlet erzeugen Netzwerkprogrammierung 0
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
E HttpUrlConnectionExample cannot be resolved to a type / Java 8 Netzwerkprogrammierung 1
F Socket Java Server mit Android App, Antwort vom Server an App Netzwerkprogrammierung 5
M Java-Programm aus dem Web laden Netzwerkprogrammierung 3
S HTTP-Requeste von Browser mit Java sniffen? Netzwerkprogrammierung 9
J access denied (“java.net.SocketPermission”…) mit Java 8 Netzwerkprogrammierung 1
N CURL requests in Java Netzwerkprogrammierung 6
P Kritische Java-Anwendung und Citrix veröffentlichen Netzwerkprogrammierung 1
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
1 Netty NIO oder Java IO Netzwerkprogrammierung 2
1 Via Java mit WLAN Netzwerken verbinden Netzwerkprogrammierung 5
J Java Service Wrapper Netzwerkprogrammierung 1
K Mit Java ASPX Webseite fern steuern Netzwerkprogrammierung 2
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
K Emailsenden via Java Applikation Netzwerkprogrammierung 5
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
C Java Chat Admin Kenzeichnung Netzwerkprogrammierung 14
P PHP Script per Java ausführen Netzwerkprogrammierung 2
P PPTP Protokoll für JAVA Netzwerkprogrammierung 14
T php/java-bridge Netzwerkprogrammierung 16
D Webseite(mit JavaScript-Element) mit Java auslesen Netzwerkprogrammierung 0
G Multiple Clients and one Server --> java.lang.NullPointerException Netzwerkprogrammierung 1
E Java Server übers Internet erreichen Netzwerkprogrammierung 4
D Socket Error: java.lang.NullPointerException Netzwerkprogrammierung 1
windl AirPlay mittels Java Netzwerkprogrammierung 0
R Email mit Java API Netzwerkprogrammierung 1
P Java Deauth / Deauthentication request Netzwerkprogrammierung 10
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
E HTTP java.lang.IllegalArgumentException: protocol = http host = null Netzwerkprogrammierung 1
R Java - Socketprogrammierung Netzwerkprogrammierung 10
B Methoden und Konstruktoren von Java.net package werden nicht geladen Netzwerkprogrammierung 2
L Email versenden mit Java funktioniert nicht, Fehlermeldungen: MessagingException & SocketException Netzwerkprogrammierung 10
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
N Socket java.net.ConnectException Netzwerkprogrammierung 5
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20

Ähnliche Java Themen

Neue Themen


Oben