serverly: Datei-Übertragung

Hallo,

Ich bin gerade dabei einen Server zu machen, von dem Dateien heruntergeladen werden und Dateien raufgeladen werden.
Damit mehrere Dateien zugleich übertragen werden können, wird die Datei in Pakten übertragen. Jedes Übertragung hat
eine ID, jede Übertragung beginnt mit einem Header-Paket und endet mit einen Paket, wo ein END-Flag gesetzt ist.

In Zukunft soll der Server auch noch andere Funktionen wie einen Chat haben.

Bevor er Dienste des Server verwenden kann, muss sich der Client einloggen.

Ist das akzeptabel oder sollte ich das anders machen (Dateien nacheinander übertragen, etc.)?

lg serverly

PS: Ich weiß zwar wie man eine Verbindung aufbaut, aber ich weiß nicht wie ich das Protokoll formulieren soll.
Vorher habe ich vorher nur einmal einen Chat realisiert, wo ja nicht so große Datenmengen übertragen werden
und auch nichts zugleich übertragen wird. Somit war der Chat nicht schwer.

  1. Tach,

    PS: Ich weiß zwar wie man eine Verbindung aufbaut, aber ich weiß nicht wie ich das Protokoll formulieren soll.

    gibt es einen wirklich _guten_ Grund ein eigenes Protokoll an Stelle eines bewährten zu nutzen?

    mfg
    Woodfighter

    1. Hallo,

      Wie gesagt, ich hab bis jetzt nur einen Chat gemacht. Ich kenn mich in Sachen Netzwerk nicht noch gut aus.

      Ich kenne HTTP und FTP, aber bei HTTP ist keine gleichzeitige Übertragung möglich, wie FTP genau funktioniert weiß ich nicht und andere Protokolle, die Dateien übertragen kenn ich nicht. Es sollte jedenfalls in Java geschrieben sein, Authentifizierung unterstützen und das Programm sollte auch mehr als nur Dateien übertragen können. Ich weiß ja nicht ob ich mehrere Protokolle verwendet soll um mehr als nur Dateiübertragung zu ermöglichen.

      Das ganze soll dann primär dazu dienen, Daten (Videos, Programme) zentral zu speichern. Aber auch Chat und kleine selbstgeschriebene Java-Multiplayer-Spiele sollen über den Server laufen. Wenn es möglich ist, soll man auch Videos vom Server streamen und am Client-Programm ansehen können ohne sie runterladen zu müssen.

      Ich hab gerade was über SCTP gelesen. Dort wird Multistreaming unterstützt. Aber SCTP wird, soweit ich weiß, nicht von Java unterstzützt.

      lg serverly

      1. hi,

        Ich hab gerade was über SCTP gelesen. Dort wird Multistreaming unterstützt. Aber SCTP wird, soweit ich weiß, nicht von Java unterstzützt.

        Falls Du HTTP verwenden möchtest, die socket-Unterstützung von Java ist recht einfach. Es gibt auch leicht verständliche Methoden zum Parsen der Header. Sofern mehrere Dateien zu übertragen sind nutze HTTP/1.1 und persistent Connection (Server wartet auf weitere Daten, hält Verbindung/socket offen).

        Hotti

        1. Tach,

          Falls Du HTTP verwenden möchtest, die socket-Unterstützung von Java ist recht einfach.

          stimmt, einen HTTP-Server in Java zu implementieren, ist mal eine neue Idee: http://java-source.net/open-source/web-servers

          nutze HTTP/1.1

          HTTP 1.1 ist immer noch deutlich komplizierter als du das gerne hättest.

          mfg
          Woodfighter

          1. Moin,

            HTTP 1.1 ist immer noch deutlich komplizierter als du das gerne hättest.

            Da hast Du schon recht ;-)

            Allerdings solltest Du Dein Verständnis zum OSI Referenzmodell noch ein bischen weiterentwickeln (wenn Du schon anner Unität studiert hast).

            Schöner Tach,
            Horst Ossi

            1. Tach,

              Allerdings solltest Du Dein Verständnis zum OSI Referenzmodell noch ein bischen weiterentwickeln .

              wozu? Ich habe das Modell verstanden, ich weiß dass es (so gut wie gar) nicht genutzt wird. Wie Sven schrieb "OSI ist schöne Theorie".

              (wenn Du schon anner Unität studiert hast)

              Ich weiß immer noch nicht, was mein Mathe-Studium damit zu tun haben soll.

              mfg
              Woodfighter

      2. Hi!

        Ich kenne HTTP und FTP, aber bei HTTP ist keine gleichzeitige Übertragung möglich, wie FTP genau funktioniert weiß ich nicht und andere Protokolle, die Dateien übertragen kenn ich nicht.

        Was ist dein Grund für eine gleichzeitige Übertragung in einer Verbindung? Die Übertragungszeit über alles ist beim "Durcheinander" nicht geringer als bei einem Nacheinander. FTP baut zwar eine Verbindung zur Steuerung und je einen eigene zur Dateiübertragung, aber wärend die Übertragung läuft, ist die Steuerungsverbindung nicht weiter nutzbar. Also ist das quasi auch nur eine Einfachverbindung. Ob andere Protokolle eine Mischübertragung bieten ist mir nicht bekannt. Aber notwendig ist sowas im Prinzip nicht, denn TCP/IP kann von sich aus mehrere Verbindungen zwischen zwei Endpunkten gleichzeitig offen haben.

        Es sollte jedenfalls in Java geschrieben sein, Authentifizierung unterstützen und das Programm sollte auch mehr als nur Dateien übertragen können. Ich weiß ja nicht ob ich mehrere Protokolle verwendet soll um mehr als nur Dateiübertragung zu ermöglichen.

        Ein Protokoll, aber ruhig mehrere Verbindungen. Wenn du das unbedingt so brauchst.

        Das ganze soll dann primär dazu dienen, Daten (Videos, Programme) zentral zu speichern. Aber auch Chat und kleine selbstgeschriebene Java-Multiplayer-Spiele sollen über den Server laufen. Wenn es möglich ist, soll man auch Videos vom Server streamen und am Client-Programm ansehen können ohne sie runterladen zu müssen.

        Für Streaming muss man sich gegebenenfalls ein darauf spezialisiertes Protokoll aussuchen.

        Ich hab gerade was über SCTP gelesen. Dort wird Multistreaming unterstützt.

        SCTP, interessant. Für das ursprünglich dafür geplante Einsatzgebiet sieht mir das auch begründet aus.

        Aber SCTP wird, soweit ich weiß, nicht von Java unterstzützt.

        Also, wenn ich nach SCTP und Java suchen lasse, bekomme ich eine Sun-Seite zur Antwort, also noch nicht mal nur eine Erweiterung von einem Dritthersteller. Die Frage bleibt aber immer noch, warum du ein für Telefoniezwecke entworfenes Protokoll zu benötigen gedenkst und nicht einfach mehrere herkömmliche HTTP-Verbindungen aufbauen kannst.

        Lo!

        1. Hallo,

          Meinst du, das ich für jede Datei-Übertragung eine Verbindung machen soll und für Streaming wieder eine eigene Verbindung?
          Wie funktioniert dann ein Login bei so vielen Verbindungen? Jedes mal neu anmelden?

          lg serverly

          1. Hi!

            Meinst du, das ich für jede Datei-Übertragung eine Verbindung machen soll und für Streaming wieder eine eigene Verbindung?
            Wie funktioniert dann ein Login bei so vielen Verbindungen? Jedes mal neu anmelden?

            Wie ein Login funktionier, kommt auf das Protokoll an. HTTP kennt kein Login, aber es kennt Authentification. Wenn man weiß, dass man eine Authentifizierung senden muss, kann man gleich beim ersten Request (und natürlich bei allen weiteren) die entsprechenden HTTP-Header setzen und muss sich nicht erst das 401 Unauthorized abholen. Das ist ein recht geringer Aufwand, den du nicht überbewerten solltest. Er rechtfertigt jedenfalls nicht, auf etwas vermutlich deutlich Komplexeres wie SCTP umzusteigen.

            Lo!

      3. Hi,

        Wie gesagt, ich hab bis jetzt nur einen Chat gemacht. Ich kenn mich in Sachen Netzwerk nicht noch gut aus.

        Ich kenne HTTP und FTP, aber bei HTTP ist keine gleichzeitige Übertragung möglich, wie FTP genau funktioniert weiß ich nicht und andere Protokolle, die Dateien übertragen kenn ich nicht.

        Damit lieferst du selber gerade das beste Argument, darauf zu verzichten, hier dein eigenes Süppchen zu kochen.

        In die Entwicklung der etablierten Protokolle ist einiges an Erfahrung von zahlreichen „hellen Köpfen“ eingeflossen, die sich fundierte Gedanken zu zahlreichen Aspekten wie Sicherheit, Fehlererkennung, Robustheit, etc. pp. gemacht haben.

        All das jetzt in einer spontanen Eigenentwicklung genauso praxistauglich implementiert bekommen zu wollen, und das auf einem „ich hab bis jetzt nur einen Chat gemacht“-Wissenslevel, ist ein Größenwahn, der dich höchstvermutlich schneller in den Allerwertesten beißen wird, als du dir vorstellen kannst.

        *Beschäftige* dich mit den etablierten Protokollen.
        Entscheide anschließend - wenn du genügend Informationen über diese zusammengetragen hast, um dies auch fundiert tun zu können - welches sich für dein Vorhaben am besten eignet.

        MfG ChrisB

        --
        The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” but “That's funny...” [Isaac Asimov]