Socket Connection Timeout en el teléfono Android
Estoy tratando de hacer algunos servidor / socket de programación. El código del servidor está escrito en Java normal en una máquina Ubuntu. El código del cliente está escrito para mi LG Thrill. El servidor parece funcionar bien. He probado el servidor escribiendo un cliente de prueba simple en Java llano que básicamente utiliza el bloque try / catch con ip de "localhost". Comprobé si el IP era accesible por ssh'ing en la máquina del servidor desde mi teléfono (sí, es accesible).
Mi código de servidor se ve así:
- ¿Cómo asociar la intención de conectividad a socket?
- Cómo pasar datos del servidor a la aplicación de Android: REST vs Sockets
- No obtiene respuesta en la conexión de socket
- 'Permiso denegado' al conectarse al socket unix abstracto
- Servicio de Android para sockets TCP
package org.vsector.server; import java.io.IOException; import java.net.ServerSocket; public class SceneFlowServer { int port; Thread running = null; CameraHandler handler = null; public SceneFlowServer( int port, CameraHandler handler ){ this.port = port; this.handler = handler; } public void start(){ if( handler == null ) return; try{ running = new Thread(){ public void run(){ try{ ServerSocket listen = new ServerSocket( port ); while( true ){ System.out.print( "I am waiting on port " + port + "... " ); handler.accept( listen.accept() ); System.out.println( "Got someone!" ); Thread spinoff = new Thread( handler ); spinoff.start(); } }catch( IOException e ){ System.err.println( "Could not listen on port " + port + "!" ); System.err.flush(); return; } } }; running.start(); running.join(); }catch( Exception e ){ System.err.println( "Could not start thread!" ); System.err.flush(); } } }
Mi CameraHandler código:
package org.vsector.server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; public class CameraHandler implements Runnable { Socket client = null; public CameraHandler(){ } public void accept( Socket client ){ this.client = client; } @Override public void run() { // TODO Auto-generated method stub BufferedReader in; try { in = new BufferedReader( new InputStreamReader( client.getInputStream() )); System.out.println( in.readLine() ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { client.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Mi código de cliente se ve así:
package org.vsector.client; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.net.Socket; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ProcessingClientActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView text = (TextView) findViewById( R.id.textBox ); Socket sock; try { text.append( "\nOpening and writing to socket... " ); sock = new Socket(); sock.connect( new InetSocketAddress( "some ip", 4444 ), 30000 ); PrintWriter out = new PrintWriter( sock.getOutputStream(), true ); out.println( "Hello!" ); out.close(); sock.close(); text.append( "Done!" ); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); text.append( "Error: " + e + "\n" ); text.append( e.getMessage() ); } } }
El permiso se establece, pero esto aún resulta en "Error: java.net.SocketTimeoutException: Tiempo de espera de conexión."
¡No puedo imaginar qué lo causa! ¿Algunas ideas?
Editar:
No importa. Problema de red. Corrí el código en mi red doméstica y todo funciona bien.
- Socket de transferencia de una actividad a otra
- Cliente-Servidor: Transferencia de archivos de Android a PC conectada vía socket
- Socket Android excepción "socket está cerrado"
- Conexión larga de sondeo TCP de Android
- AsyncTask, doInBackground nunca se ejecuta en android
- Comunicación de LocalSocket con el dominio de Unix en Android NDK
- Socket para servidor Android
- Android M doze modo y socket "nativo" posix congelado
Dude, intenta agregar flush () entre ellos:
out.println( "Hello!" ); out.flush(); //add this line out.close();
Your'e que cierra el zócalo para ayunar quizá ..
No hay ningún problema real con el código, pero todo con la red en la que estaba.
Después de que me trasladé a mi red doméstica, todo funciona.
- Implementación de la muestra de codecs de medios en android 4.1
- Android: ¿hay una manera de aplicar un margen de margen derecho dentro de un edittext?