Socket BufferedReader.read(char[] buffer) blockiert unregelmäßig

christian667

Neues Mitglied
Howdy :)
Ich arbeite schon längere Zeit an einem eigenen XMPP client und nutze zum lesen des Sockets einen BufferedReader. Da ich zeichenweise einlesen möchte und das anfänglich auch gleich so parse, habe ich ein
Java:
 char[] buffer = char[1]
und lese mit der Funktion
Java:
 BufferedReader.read(buffer)
byteweise in meinen Bufferarray.
Konkret sieht das also ungefär so aus:
Java:
int test = 0;
char[] buffer = char[1];
test = reader.read(buffer);
Das merkwürdige ist, dass die Memberfkt. read(char[]) blockierend arbeiten soll, also sollte etwas in dem buffer stehen, liest sie das in das char[] und weiter geht's im Text.. Dabei steht der Rückgabewert danach auch in "test" als int interpretiert. Ist "test" nun == -1, sollte das das Stream Ende per Definition sein. Soweit alles klar, aber es passiert etwas ganz unvorhergesehenes: Nach vielen Stunden korrekter arbeitsweise, blockiert .read() nicht mehr korrekt, sondern löst sich und das mit test==-1, was ich mir nicht erklären kann!
Hat jemand eine Idee, was da vor sich geht?
lg
 
S

SlaterB

Gast
eine javaunabhängige Trennung der Netzwerkverbindung durch normalen Netzwerkfehler (verlorene Nachrichten) oder automatisch durch die Gegenseite, das Betriebssystem, Firewall, Provider oder wer sonst was zu sagen hat, kommt nicht in Frage?
 

christian667

Neues Mitglied
Doch, es passiert immer dann, wenn ich den computer in den ruhezustand schicke und wieder aufwecke. Mein Client verbindet automatisch erneut, aber der BufferedReader löst die Blockade in diesem Moment für entweder 2 Mal oder ~ 40.000 mal.. unberechenbar. Ich habe das ganze in eine Schleife gepackt, die ließt, solange "test == -1" ;-)
Ist somit aber mehr oder weniger ein work-around.. ich verstehe halt nicht, warum das wiederverbinden der netzwerkschicht den bufferedReader vorgaukelt, es gäbe neue daten?!
lg
 
S

SlaterB

Gast
ich verstehe es noch nicht, was genau passiert 2x oder 40.000x? was sind die neuen Daten?
wenn -1 kommt dann sollte der Reader zu Ende sein und nicht mehr verwendet werden,
egal ob die Verbindung wiederhergestellt werden kann oder ähnliches, in dem Fall ist ein neuer Reader doch nicht zuviel verlangt?

wenn -1 gelesen wird, dann immer wieder -1, ohne zu blockieren, das ist einfach die 'ich bin tot'-Meldung,
ein Test a la == -1 ist ganz gewiss etwas richtiges, gehört fast zu jedem Reader,
danach sollte nie wieder gelesen werden

oder falls du schon selber irgendwie einbaust, dass verrückterweise später mal wieder was anderes als -1 kommt,
dann könntest du zumindest in diesem Fall eine 10 Sekunden-Wartepause einbauen, weil der Reader nicht blockiert sondern immer -1 zurückgibt (40.000x?)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M HTTP URLConnection + BufferedReader killt meine Umlaute Netzwerkprogrammierung 4
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
X Socket [Anfänger] BufferedReader.readLine() lässt sich Zeit Netzwerkprogrammierung 1
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
V Socket BufferedReader interrupten? Netzwerkprogrammierung 10
B Multi-Threaded block bei BufferedReader.readLine() Netzwerkprogrammierung 8
S BufferedReader blockiert zu lange Netzwerkprogrammierung 4
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
C 2 BufferedReader als Listener pro Socket (NICHT) möglich? Netzwerkprogrammierung 2
E BufferedReader.ready() immer false Netzwerkprogrammierung 8
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
AlClemento Sockets -> BufferedReader Problem Netzwerkprogrammierung 2
C Kollision von ObjectInputStream und BufferedReader ? Netzwerkprogrammierung 6
O BufferedReader.readline kommt nicht zurück Netzwerkprogrammierung 7
F BufferedReader Socket Netzwerkprogrammierung 2
B BufferedReader.readLine() ließt nicht vollständig ! ? Netzwerkprogrammierung 5
J Vom BufferedReader lesen -> hängt ohne Fehler,ohne Except Netzwerkprogrammierung 2
Dit_ FTP Befehl 'LIST' | Read timed out Netzwerkprogrammierung 7
M java.net.SocketTimeoutException: Read timed out Netzwerkprogrammierung 2
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
M BufferedInputStream.Read wirft SocketException auf gültigem Socket Netzwerkprogrammierung 7
G Bild URL über ImageIO.read Netzwerkprogrammierung 8
N read() und write() Netzwerkprogrammierung 4
T BufferedInputStream#read Netzwerkprogrammierung 34
F Char über Netzwerk senden Netzwerkprogrammierung 6
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben