Socket.setSoTimeout -> BufferedReader -> Default value

WIng2005

Mitglied
Hallo zusammen,

läßt sich auf ein TimeOut beim Einlesen einer SocketVerbindung über einen BufferedReader irgendwie reagieren bzw. ein Default-Wert setzen?

Java:
try {
            
            Socket meinEchoSocket= new Socket();
            meinEchoSocket.setSoTimeout(1000);
            meinEchoSocket.connect(new InetSocketAddress(this.ip, port), 2000);

            OutputStream socketoutstr = meinEchoSocket.getOutputStream();
            OutputStreamWriter osr = new OutputStreamWriter( socketoutstr );
            BufferedWriter bw = new BufferedWriter( osr );

            InputStream socketinstr = meinEchoSocket.getInputStream();
            InputStreamReader isr = new InputStreamReader( socketinstr );
            BufferedReader br = new BufferedReader( isr );


            String client_echo;
            bw.write(cmd);
            bw.newLine();
            bw.flush();
            client_echo = br.readLine();
            
            bw.close();
            br.close();
            meinEchoSocket.close();

            return client_echo;
        }
        catch (UnknownHostException uhe) {
            Main.mainFrame.appendTextAreaErrorMessages("->SocketClient uhe: " +this.ip);
            Main.mainFrame.appendTextAreaErrorMessages("->" + cmd);
            Main.mainFrame.appendTextAreaErrorMessages("-->" + uhe);
            return"Fehler";
        }
        catch (IOException ioe) {
            Main.mainFrame.appendTextAreaErrorMessages(getNow());
            Main.mainFrame.appendTextAreaErrorMessages("->SocketClient ioe: " +this.ip);
            Main.mainFrame.appendTextAreaErrorMessages("->" + cmd);
            Main.mainFrame.appendTextAreaErrorMessages("-->" + ioe);
            return "Fehler";
        }
        catch (Exception e) {
        Main.mainFrame.appendTextAreaErrorMessages("->SocketClient e: " +this.ip);
        Main.mainFrame.appendTextAreaErrorMessages("->" + cmd);
        Main.mainFrame.appendTextAreaErrorMessages("-->" + e);
            return "Fehler";
        }


Der Teil: client_echo = br.readLine(); würde ja nach meinem Verständnis durch meinEchoSocket.setSoTimeout(1000) nach 1s abgebrochen (korrigiert mich). Aber läßt sich in diesem Fall auch ein Default-Wert für client_echo vergeben, oder reich ein client_echo="TimeOut" VOR dem einlesen zu setzen und im Falle eines TimOuts verbleibt dieser Wert?

VG
Steffen
 
Oder wird im Falle eines TimeOuts eine Exception geworfen? Ich logge gerade mal etliche Verbindungen und habe zumindest 1x eine IOExcpetion (java.net.SocketTimeoutException) abgefangen.
 
Du hast Dir die Frage ja selbst beantwortet, aber Du kannst Dir die Dokumentation von setSoTimeout ansehen - da ist es auch beschrieben:
Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a positive timeout value, a read() call on the InputStream associated with this Socket will block for only this amount of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the Socket is still valid. A timeout of zero is interpreted as an infinite timeout. The option must be enabled prior to entering the blocking operation to have effect.
Parameters:timeout - the specified timeout, in milliseconds.Throws:SocketException - if there is an error in the underlying protocol, such as a TCP errorIllegalArgumentException - if timeout is negative
 
Hallo Steffen
ja, mein Post war vermutlich unüberlegt.
Das sollte nicht meine Aussage sein. Deine Postings sind sehr willkommen - sowohl das erste mit der Fragestellung als auch die Ergänzung mit der möglichen Antwort.

Meine Reaktion hätte vermutlich auch besser etwas sein sollen wie: "Damit hast Du den Nagel auf den Kopf getroffen" oder so. Deine Vermutung mit der Exception war halt korrekt.
Aber danke für den Link!!
Sehr gerne. Das war in meinen Augen die beste Bestätigung, dass Deine Vermutung korrekt ist.

Und ganz wichtig: Was sollte keine "RTFM" (Read The Fu... Manual) sein. Es ist gut, in die Dokumentation hinein zu schauen, aber gerade am Anfang ist es schwer, dort immer das zu finden, was man braucht.

Das einfach nur einmal als mögliche Klarstellung (und sorry, falls ich in deinen Satz zu viel hinein interpretiert haben sollte. Aber der Punkt ist mir nun einmal sehr wichtig! Ich wirke halt manchmal etwas schroff, aber das ist keine Absicht!)
 

Zurück
Oben