Problem mit DataOutputStream und DataInputStream
-
Hallo
Ich hab Probleme mit den oben genannten Klassen. Ich habe ein Server - Client Programm. Der Client sendet Daten an den Server.
Ab und zu bekomm ich vom Server:
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)Diesen Fehler kann ich umgehen wenn ich im Client ein Thread.Sleep(5) mache.
Synchronisiert sich Client und Server nicht? Kann man das irgendwie einrichten dass sich Server und Client synchronisieren?
Danke
lg
-
die informationen zum problem sind dürftig, hast du eventuell einige kleine auszüge, vor allem vom server und der stelle wo die exception auftritt ? weil "nur" wegen einem kleinen sleep(5) kommt sowas nicht zustande, das sind meist andere umstände
zur fehlerbehandlung empfehle ich dir dich mal mit try-catch zu arbeiten ... in der java api wird zu jedem befehl auch dokumentiert WAS er wirft und WARUM er wirft
-
Danke für die Antwort. Ich habe eine Klasse Message die eine Funktion Encode und Decode hat:
@Override public byte[] encodePackage() throws IOException { ByteArrayOutputStream buf = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(buf); ByteArrayInputStream is = new ByteArrayInputStream(getMessageText().getBytes( DEFAULT_ENCODING )); int numRead=0; byte b[] = new byte[1024]; while ((numRead = is.read(b)) > 0) { out.write(b, 0, numRead); } return buf.toByteArray(); }
und
ByteArrayOutputStream sb = new ByteArrayOutputStream(); byte[] buff = new byte[1024]; int rcv; int total = 0; while(total < 1200) { if((rcv = in.read(buff, 0, 1024)) == -1) break; sb.write(buff,0,rcv); total += rcv; sb.flush(); } return sb.toString(DEFAULT_ENCODING);
Server hat
ServerSocket serv = new ServerSocket(1234); Socket clnt = serv.accept(); DataInputStream src = new DataInputStream( clnt.getInputStream() );
und Client
sock.getOutputStream().write( text );
Ich kann einige Objekte schicken - aber nach ein paar liest er zuviele Zeichen (meistens 2048!?). Mein String ist 1200 lang - hab das schon hard codiert drinnen weil ich nix mehr geglaubt hab
Vl. sieht wer einen Fehler