Hallo ich habe da eine Frage,
und zwar möchte ich gerne über einen Socket größere Daten verschicken, aber es muss auch gleichzeitig eine stetige Client-Server Kommunikation vorhanden sein, um z.B. die Dateiübertragung abzubrechen.
Deshalb habe ich mir jetzt überlegt, was da die beste Lösung dafür ist.
Ich benütze einen Buffered(Output/Input)Stream und habe jetzt versucht 2 Sockets von einem Client zu dem gleichen Server aufzubauen. Ein Socket für die Kommunikation, der andere für die Dateiübertragung.
Nun habe ich aber das Gefühl, dass der zweite Socket den ersten irgendwie überschreibt und der Server meldet auch immer nur eine einkommende Socketverbindung.
Kann das sein? Dazu hatte ich leider nichts gefunden ob das funktioniert. Ich habe es einfach mal versucht.
Die andere kompliziertere Variante wäre, wenn das mit den 2 Sockets nicht funktioniert, alles über ein Socket zu verschicken, halt dann nur mit einem extra Packet Header, um zwischen Datenpacketen und Nachrichten zu unterscheiden.
Dort ist dann ja das Problem, den Header zum richtigen Zeitpunkt abzuschicken, da ja immer wieder automatisch ein flush im BufferedOutputStream kommt und der Header am Anfang stehen muss.
Man kann ja zum Glück die max. Größe des Buffers übergeben. Sendet er dann tatsächlich den Buffer nur dann, wenn die max. Anzahl an Bytes im Buffer erreicht wurde, oder hängt das noch von etwas anderem ab? (Außer wenn man selber einen flush macht) und was ist eigentlich der Standardwert?
Wenn das der fall wäre, dann kann ich ja berechnen, wann ich wieder einen Header anfügen muss.
Nagut mir fällt auch gerade auf, dass es relativ egal ist, wann der flush kommt. Ich kann auch einfach nach jeden x Bytes den Header anhängen und eine Längenangabe darin einfügen. Was wäre dann ein geschicktes x?
Kennt jemand noch evtl. eine bessere Sende/Empfang Strategie? Das ist für mich noch ziemliches Neuland.
Danke!
und zwar möchte ich gerne über einen Socket größere Daten verschicken, aber es muss auch gleichzeitig eine stetige Client-Server Kommunikation vorhanden sein, um z.B. die Dateiübertragung abzubrechen.
Deshalb habe ich mir jetzt überlegt, was da die beste Lösung dafür ist.
Ich benütze einen Buffered(Output/Input)Stream und habe jetzt versucht 2 Sockets von einem Client zu dem gleichen Server aufzubauen. Ein Socket für die Kommunikation, der andere für die Dateiübertragung.
Nun habe ich aber das Gefühl, dass der zweite Socket den ersten irgendwie überschreibt und der Server meldet auch immer nur eine einkommende Socketverbindung.
Kann das sein? Dazu hatte ich leider nichts gefunden ob das funktioniert. Ich habe es einfach mal versucht.
Die andere kompliziertere Variante wäre, wenn das mit den 2 Sockets nicht funktioniert, alles über ein Socket zu verschicken, halt dann nur mit einem extra Packet Header, um zwischen Datenpacketen und Nachrichten zu unterscheiden.
Dort ist dann ja das Problem, den Header zum richtigen Zeitpunkt abzuschicken, da ja immer wieder automatisch ein flush im BufferedOutputStream kommt und der Header am Anfang stehen muss.
Man kann ja zum Glück die max. Größe des Buffers übergeben. Sendet er dann tatsächlich den Buffer nur dann, wenn die max. Anzahl an Bytes im Buffer erreicht wurde, oder hängt das noch von etwas anderem ab? (Außer wenn man selber einen flush macht) und was ist eigentlich der Standardwert?
Wenn das der fall wäre, dann kann ich ja berechnen, wann ich wieder einen Header anfügen muss.
Nagut mir fällt auch gerade auf, dass es relativ egal ist, wann der flush kommt. Ich kann auch einfach nach jeden x Bytes den Header anhängen und eine Längenangabe darin einfügen. Was wäre dann ein geschicktes x?
Kennt jemand noch evtl. eine bessere Sende/Empfang Strategie? Das ist für mich noch ziemliches Neuland.
Danke!