Client-Server Verbindung: Pro Verbindung 2 verschiedene Streams möglich? EDIT: Ja!

Hi,

Ich schreibe gerade eine Art FTP-Programm, bei denen es den Clients möglich ist, Datein auf den Server hochzuladen und alle Datein, die sich auf dem Server befinden auch wieder herunterzuladen. Dazu werden den Clients in einer Tabelle alle Dateien die sich auf dem Server befinden angezeigt, samt Dateiname, Dateigröße usw.
Die Dateigröße und Dateiname usw werden vom Clienten aus in die Datenbank geschrieben. Bisher wird die Client-Server Verbindung nur dazu genutzt, dass der Client die jeweilige Datei zum Server sendet und der Server diese dann bei sich speichert.
Das Problem ist aber nun, dass der Server ja den Dateinamen der Datei braucht (oder irgendein anderes eindeutiges Kennzeichen der Datei), damit der Server bei einer Downloadanfrage eines Clienten für eine Datei x auch genau diese Datei x zum Clienten schicken kann.
Außerdem muss der Datei-Vom-Server-Zum-Clienten-Senden Prozess ja auch angestoßen werden. Dafür müsste ich denke ich auch Nachrichten zwischen Client-Server schicken können.

Fazit:
Ich brauche defenitiv 2 verschiedene parallele Streams pro Client-Server Verbindung.

Geht sowas überhaupt?
Falls ja, wäre dies auch für mein Vorhaben empfehlenswert?

Edit:
Für Leute die dies vll auch intressiert:

Habe es inwzwischen einfach mal selbst ausprobiert und es ging doch recht einfach:

Ablauf Client:

  • Erst Streams für das Senden eines Strings einrichten und den String senden. Die geöffneten Streams jedoch offen lassen!
  • Danach dann Streams für das Senden einer Datei einrichten und die Datei senden.

Ablauf Server:
Analog zum Client, nur eben lesen statt schreiben.

[QUOTE=Jack159]
Fazit:
Ich brauche defenitiv 2 verschiedene parallele Streams pro Client-Server Verbindung.[/QUOTE]
Wenn nichts parallel laufen muss definitiv nicht. Da würde einfach ein Protokoll ausreichen, vgl. FTP :wink:

ouh … da hat aber mal wieder jemand keine ahnung von TCP

TCP , also eine Socket-Verbindung , ist grundsätzlich bi-direktional
das bedeutet das du über EINE verbindung sowohl daten senden kannst , über Socket.getOutputStream() , also auch natürlich daten von der gegenseite lesen kannst , über Socket.getInputStream()

sowas wird über sog. Protokolle gesteuert , also eine vorschrift die besagt wie eine solche verbindung abläuft

wenn wir uns FTP als beispiel nehmen ist es relativ einfach : der client sendet zum server : “gib mir datei X”
der server verarbeitet diese anfrage und sendet dem client daraufhin die angeforderte datei, in der regel wird vorher noch ne info über die größe ausgehandelt
die aufgabe vom client ist es nun soviele bytes vom server zu lesen wie dieser vorher als datei-größe übermittelt

gut, bei FTP ist das alles noch etwas komplexer weil hier wirklich noch eine zweite verbindung genutzt wird (FTP teilt sich in control und data) , aber ich denke wenn man das mal refactoren würde dann könnte man da auch ein schlankeres protokoll mit nur einer verbindung und ggf komprimierung draus machen … ist halt einfach ur-alt

am besten du guckst dir noch mal das einfachste aller netzwerk-beispiele an : einen simplen chat
und wenn du das dann drauf hast schickst du anstatt text-nachrichten halt entsprechende deines protokolls commandos und daten