8

Estoy desarrollando una aplicación móvil para Android. Allí, estoy creando un socket y transfiero datos entre los móviles android y la aplicación de Windows (que se ejecuta en una computadora portátil). Estoy usando androide 2,3¿Cuál es el valor de tiempo de espera predeterminado de java.net.Socket en Android?

móvil de pruebas Samsung Galaxy pop
el PC y móviles están conectados a través de USB tithering.
La transferencia de datos es correcta.
Pero un problema es que en la mitad de la aplicación, el titionamiento se cancela desenchufando el caple del usb del sistema, entonces arrojo una excepción.

Pero algunas veces no lo hace a través de cualquier excepción que simplemente espera, Socket también no espera cerrados para los datos para la lectura
Así que por favor enviar el tiempo de toma de espera predeterminado vez en Android


Mis códigos de muestra se indican a continuación

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"); 


Cuando utilizo el código

Socket.getSoTimeout() 


Luego devuelve 0.


Por favor, todos dan sus ideas.

+0

¿Cuál es el valor que obtiene cuando llama a 'Socket.getSoTimeout()'? –

Respuesta

5

El tiempo de espera predeterminado de lectura de socket es infinito, como dice en el Javadoc, "Un tiempo de espera de cero se interpreta como un tiempo de espera infinito". Si desea un valor finito, llame al Socket.setSoTimeout().

+2

¿Puede indicar dónde está escrito esto en el Javadoc? –

+1

"Un tiempo de espera de cero se interpreta como un tiempo de espera infinito". https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#setSoTimeout(int) – Ray

0

No conozco el tiempo de espera predeterminado use this.socket.setSoTimeout(5000); pero puede intentar establecer un valor de tiempo de espera superior. Aquí 5000 milisegundos significa 5 segundos. Espero que esto solucione tu problema.

+5

Si no conoce el valor predeterminado, ¿cómo puede saber que establecerlo en 5000 lo aumentará? – EJP

+0

no lo aumentará, supongo ... lo configurará en 5 segundos – user632905

+0

Entonces, ¿qué hay de publicar eso en su respuesta de manera coherente? – EJP

Cuestiones relacionadas