Android - Socket time-out

Habe ich einige seltsame sockel Verhalten geht. Ich habe ein timeout von 5 Sekunden mit setSoTimeout. Dies sollte genügend Zeit sein in meiner situation. Nach ein online java Dokumentation einer SocketTimeoutException geworfen werden sollte, wenn es mal aus. Es sagt auch, dass der sockel ist immer noch gültig. Also ich will, es zu fangen und dann weiter. Aber statt der innere Haken, der äußere catch - IOException Fang der expception und wenn ich die Ausgabe in die log-details Sie sagt, es war ein SocketTimeoutException. Eine andere verblüffende Sache ist, ändere ich den timeout von 5 Sekunden, um zu sagen, 15 Sekunden und melden Sie sich die Zeit nehmen, für jeden zu Lesen, die immer mal wieder in den milli-Sekunden-Bereich, nie auch nur annähernd eine Sekunde. Alle Ideen werden SEHR geschätzt.

ReadThread code-snippet

@Override
public void run()
{
    try
    {
        while (true)
        {
            byte[] sizeBuffer = new byte[BYTES_FOR_MESSAGE_SIZE];

            int bytesRead = this.inputStream.read(sizeBuffer);

            int length = 0;

            for (int i = 0; i < BYTES_FOR_MESSAGE_SIZE; i++)
            {
                int bitsToShift = 8 * i;
                int current = ((sizeBuffer[i] & 0xff) << bitsToShift);
                length = length | current;
            }

            byte[] messageBuffer = new byte[length];


            this.socket.setSoTimeout(5000); //5 second timeout

            try
            {
               this.inputStream.read(messageBuffer);
            }
            catch(java.net.SocketTimeoutException ste)
            {
               Log.e(this.toString(), "---- SocketTimeoutException caught ----");
               Log.e(this.toString(), ste.toString());
            }

        }
    }
    catch (IOException ioe)
    {
       Log.e(this.toString(), "IOException caught in ReadThread");
       Log.e(this.toString(), ioe.toString());
       ioe.printStackTrace();
    }
    catch (Exception e)
    {
       Log.e(this.toString(), "Exception caught in ReadThread");
       Log.e(this.toString(), e.toString());
       e.printStackTrace();
    }

    this.interfaceSocket.socketClosed();

}//end run

InformationsquelleAutor bursk | 2010-10-18

Schreibe einen Kommentar