Ist es sinnvoll in Java 2 Server-Client Verbindungen aufzubauen (1. für Daten, 2. für Anweisungen an den Client?

... komplette Frage anzeigen

2 Antworten

Ich habe dieses "Problem" mit Objekten gelöst und mir daraus ein größeres Konstrukt aufgebaut. 

Beispielsweise klein angefangen mit einem

"MyNetworkPackage" was rein Informationen über Sender und Empfänger beinhält.

Und dann davon ableitende Elemente wie: 

"MyServerToClientRequest", was dann von ersterem ableitet und die Klasse erweitert.

Und dann für spezifische Aufgaben gibt es dann noch weitere Ausprägungen wie:

"MyServerToClientFiletransferRequest"

Und entsprechend kannst du auf Empfängerseite dann darauf reagieren: Generell würdest du den geringsten Typen wie: "MyNetworkPackage" entgegen nehmen, und dann prüfen, was für eine Implementation du bekommen hast und entsprechend darauf reagieren:

private void recieve(MyNetworkPackage package) {

   if (package instanceof MyServerToClientFiletransferRequest) {
       MyServerToClientFiletransferRequest filetransfer = (MyServerToClientFiletransferRequest) package;
       filetransfer.downloadFile();
   }
}

Um das Bewerkstelligen zu können, benötigt man beim schreiben und lesen aus dem Socket einen ObjectInputStream und einen ObjectOutputStream.

Deine eigenen Klassen müssen, damit das funktioniert, das Interface Serializable implementieren.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Bohne999
19.01.2017, 22:53

Also das ich praktisch ein Objekt über das Netzwerk schicke und das entscheidet, was passiert?

Ginge das nicht schneller, indem man immer Zeilen ließt und sich dann so einen "Kommandobaum" aufbaut? Also das ich bsw. die Nachricht d-s-152 schicke.
Dieser String wird gesplittet bei jedem "-". "d" und "s" sind dann Knoten bei einem Baum und dann wird entschieden was mit der 152 gemacht wird.

Aber soweit ich das verstanden habe beruhen beide auf dem selben Prinzip oder?

1

Nein, Ich glaube du denkst hier viel zu kompliziert, für diese Aufgaben gibt es Java RMI (remote method invocation), damit kannst du vom Server aus Methoden auf dem Client ausführen und natürlich auch andersrum.

für deine Anwendungen würdest du dann einfach sowas machen (vereinfachte Darstellung!):

client.createFile(filename);
client.doStuffWith(myFile);

Der Code(links unten) sieht vielleicht erst mal komplex aus, aber keine Sorge, es ist eigentlich ganz einfach, der Aufbau der Verbindung von Client und Server funktioniert eigentlich immer gleich und kann also copy pasted werden (außer IP natürlich) viel Spaß beim Ausprobieren ;)

hier eine Einführung in RMI: http://www.ti.uni-tuebingen.de/fileadmin/assets/csp\_ws0809/aufgabe2/aufgabe2a.pdf

eine Anleitung für einen File transfer Server:

http://www.ejbtutorial.com/java-rmi/how-to-transfer-or-copy-a-file-between-computers-using-java-rmi

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?