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 😉


Anmelden zum Antworten