8

Ich entwickle eine mobile Anwendung für Android. Dort erstelle ich Sockel und Daten zwischen Android-Handys und Windows-Anwendung (die auf dem PC, Laptop ausgeführt wird). Ich verwende android 2,3Was ist der Standard-Timeout-Wert von java.net.Socket in Android?

Testing Handy Samsung Galaxy Pop
Der PC und Handys werden über USB tithering verbunden.
Die Datenübertragung ist korrekt.
Aber ein Problem ist in der Mitte der Anwendung das Tithering abgebrochen, indem Sie die mobile USB-Caple vom System trennen, dann löst ich Ausnahme aus.

Aber einige Male es nicht durch eine Ausnahme macht es einfach wartet, Socket auch nicht geschlossen wartet auf Daten zum Lesen
Also bitte weiter unten sind die Standard-Socket-Timeout Zeit in android


Meine Beispielcodes senden

Socket socket=null; 
    DataOutputStream dos=null; 
    OutputStream os=null; 
    InputStream is=null; 
    DataInputStream dis=null; 

    try 
    { 
     Log.i(tagName, "b4 creating socket"); 
     socket=new Socket(this.getIpAddress(),this.getPort_number());     
     is=socket.getInputStream();    
     dos=new DataOutputStream(os);  
     dis=new DataInputStream(is);    
    } 
    catch(UnknownHostException unknown_ex) 
    { 
     Log.i(tagName, "Exception host unknown : "+unknown_ex.toString()); 
     unknown_ex.printStackTrace();   
    } 
    catch(IOException ioe_ex) 
    { 
     Log.i(tagName, "ioe Exception : "+ioe_ex.toString());   
     ioe_ex.printStackTrace();   
    } 
    catch(Exception ex) 
    { 
     Log.i(tagName, "Exception : "+ex.toString());  
     ex.printStackTrace();  
    } 

    if(dos!=null) 
    { 
     try 
     { 
      dos.close(); 
     } 
     catch(Exception ex) 
     { 

     } 
    } 

    if(dis!=null) 
    { 
     try 
     { 
      dis.close(); 
     } 
     catch(Exception ex){} 
    } 
    if(socket!=null) 
    { 
     try 
     { 
      socket.close(); 
     } 
     catch(Exception ex) 
     { 

     } 
    } 

    socket=null;dos=null;dis=null;  
    Log.i(tagName, "MySocketConnection.connectMe() - end"); 


Wenn ich den Code

Socket.getSoTimeout() 


Dann gibt es 0 zurück.


Bitte geben Sie alle Ihre Ideen.

+0

Welchen Wert erhalten Sie, wenn Sie 'Socket.getSoTimeout()' aufrufen? –

Antwort

5

Das Standard-Socket-Lese-Timeout ist unendlich, wie es in der Javadoc heißt, "Ein Timeout von Null wird als unendliches Timeout interpretiert.". Wenn Sie einen endlichen Wert haben möchten, rufen Sie Socket.setSoTimeout().

+2

Kannst du bitte darauf hinweisen, wo dies im Javadoc steht? –

+1

"Ein Timeout von Null wird als unendliches Timeout interpretiert." https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#setSoTimeout(int) – Ray

0

Ich kenne nicht die Standard-Timeout-Verwendung this.socket.setSoTimeout(5000);, aber Sie können versuchen, einen höheren Timeout-Wert einzustellen. Hier bedeuten 5000 Millisekunden 5 Sekunden. Hoffe das behebt Ihr Problem.

+5

Wenn Sie den Standardwert nicht kennen, wie können Sie dann wissen, dass die Einstellung auf 5000 den Wert erhöht? – EJP

+0

es wird es nicht erhöhen, ich denke..es wird es auf 5 Sekunden setzen – user632905

+0

Also wie wäre es posten, dass in Ihrer Antwort in einer kohärenten Art und Weise? – EJP