starbuck86
Mitglied
Hallo Comm.
Ich habe ein Problem und finde einfach keine Lösung.
Ausgangssituation:
Ich habe ein Serverprogramm, das Datenpakete (Form: "abc:123:k2ddds
fk8: -") via Socket an seine Clients senden soll. Dazu verwende ich einen PrintWriter. Es gibt von den oben genannten Datenpaketen etwa 100 Stück, die alle in einem Stack liegen und abgearbeitet werden. Das Senden an sich läuft als eigenständiger Thread in einer run()-Methode - solange, bis der Stack abgearbeitet/leer ist. Wichtig: Jedes Datenpaket muss einzeln gesendet werden.
Auf der anderen Seite gibt es den Client, der sich eines InputStreamReaders bedient. Er kann die oben genannten Datenpakete immer nur einzeln verarbeiten. Also es darf niemals folgendes gesendet werden: "abc:123:k2ddds
fk8: -dbc:123:k2ddds
fk8: -". Doppelte Datenpakete gehen gar nicht.
Meine Lösungsansätze:
Ich habe diesen Stack erst kürzlich eingeführt. Vorher habe ich einfach direkt die Daten versendet in einer Schleife im Hauptprogramm und habe eine Verzögerung reingemacht mit Thread.sleep(270). Mit diesem Wert kamen alle Datenpakete einzeln beim Empfänger an.
Mit Stack inkl. run() funktioniert das aber irgendwie nicht mehr. Ich habe so das Gefühl, dass dieser Thread - je länger er läuft - immmer schneller wird. Dieses sleep(300) wird irgendwie am Ende gar nicht mehr ausgeführt - allerdings auch keine Exception geworfen.
Das ganze sieht dann so in etwa aus (Die Zahlen in den Rauten grenzen ab, was auf einmal beim Client angekommen ist, bzw aus dem InputStreamReader auf einmal ausgegeben wird.):
Hat jemand eine Idee, wie ich es hinbekomme, dass alle Datenpakete vom Server einzeln gesendet und beim Client einzeln empfangen/verarbeitet werden? Bzw wo mein Engpass ist?
Danke && Gruß
Thomas
Ich habe ein Problem und finde einfach keine Lösung.
Ausgangssituation:
Ich habe ein Serverprogramm, das Datenpakete (Form: "abc:123:k2ddds

Java:
run() {
while (!s.empty()) {
String x = (String)s.pop();
System.out.println(x+" -");
pw.println(x+" -");
pw.flush();
try { this.sleep(300); }
catch (InterruptedException e) { e.printStackTrace(); }
}
...
}
Auf der anderen Seite gibt es den Client, der sich eines InputStreamReaders bedient. Er kann die oben genannten Datenpakete immer nur einzeln verarbeiten. Also es darf niemals folgendes gesendet werden: "abc:123:k2ddds


Java:
while (true) {
int anzahlzeichen = 0;
anzahlzeichen = in.read(buffer,0,100);
String eingabe = new String(buffer,0,(anzahlzeichen-1));
try { Thread.sleep(20); }
catch (InterruptedException i) { i.printStackTrace(); }
}
Meine Lösungsansätze:
Ich habe diesen Stack erst kürzlich eingeführt. Vorher habe ich einfach direkt die Daten versendet in einer Schleife im Hauptprogramm und habe eine Verzögerung reingemacht mit Thread.sleep(270). Mit diesem Wert kamen alle Datenpakete einzeln beim Empfänger an.
Mit Stack inkl. run() funktioniert das aber irgendwie nicht mehr. Ich habe so das Gefühl, dass dieser Thread - je länger er läuft - immmer schneller wird. Dieses sleep(300) wird irgendwie am Ende gar nicht mehr ausgeführt - allerdings auch keine Exception geworfen.
Das ganze sieht dann so in etwa aus (Die Zahlen in den Rauten grenzen ab, was auf einmal beim Client angekommen ist, bzw aus dem InputStreamReader auf einmal ausgegeben wird.):
#126# file:test:09:ascasc:available: -
file:test:01:cassac:available: - #126#
#127# file:test:99:csacsa:available: - #127#
...
#135# filerod:99:casascascsa:search: -
filerod:01
S:search: - #135#
#136# filerod:01:CHEMINFORMRX:search: - #136#
...
#144# file:beta:07:dhfdfghf:search: - #144#
#145# file:beta:07:fghfgh:search: -
file:beta:09:fghfgh:search: - #145#
#146# file:beta:07:fghfgh:search: - #146#
#147# keepalive - #147#
Hat jemand eine Idee, wie ich es hinbekomme, dass alle Datenpakete vom Server einzeln gesendet und beim Client einzeln empfangen/verarbeitet werden? Bzw wo mein Engpass ist?
Danke && Gruß
Thomas