title: java.net.ConnectionException: failed to connect to / 10.38.11.73
body: <p>I´m trying to connect andriod application with a server that I created. The server is running in Eclipse and I run the app in my device from Eclipse.</p>
  
  <p>In my device, I have this error: </p>
  
  <blockquote>
    <p>java.net.ConnectionException: failed to conect to / 10.38.11.xx (port:5541): connect failed: EHOSTUNREACH (No route to host)</p>
  </blockquote>
  
  <p>Both, the server and the device are connected at the same WIFI and the WIFI is running under proxy.</p>
  
  <p>The connection is implemented by Sockets using TCP/IP protocol.</p>
  
  <p>The app code is:</p>
  
  <pre><code>package com.example.localcli;
  
  import java.io.BufferedReader;
  import java.io.InputStreamReader;
  import java.io.OutputStreamWriter;
  import java.io.PrintWriter;
  import java.net.Socket;
  import java.util.List;
  
  import android.app.Activity;
  import android.location.Criteria;
  import android.location.Location;
  import android.location.LocationListener;
  import android.location.LocationManager;
  import android.location.LocationProvider;
  import android.os.Bundle;
  import android.util.Log;
  import android.widget.TextView;
  
  public class MainActivity extends Activity implements LocationListener {
     private static final String[] A = { "n/d", "preciso", "impreciso" };
     private static final String[] P = { "n/d", "bajo", "medio","alto" };
     private static final String[] E = { "fuera de servicio",
                                                 "temporalmente no disponible ","disponible" };
     private LocationManager manejador;
     private TextView salida;
  
     private String proveedor;
  
     private String dato_localizacion;
  
     Socket sk;
     BufferedReader entrada;
     PrintWriter out;
     String ip = "10.38.11.73";
     int puerto = 5541;
     boolean conectado;
  
  
  
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        salida = (TextView) findViewById(R.id.TextView01);
  
  
        manejador = (LocationManager) getSystemService(LOCATION_SERVICE);
        log("Proveedores de localización: \n ");
        Conectar();
        muestraProveedores();
  
        Criteria criteria = new Criteria();
        proveedor = manejador.getBestProvider(criteria, true);
        log("Mejor proveedor: " + proveedor + "\n");
        log("Comenzamos con la última localización conocida:");
        Location localizacion = manejador.getLastKnownLocation(proveedor);
        muestraLocaliz(localizacion); 
  
        Desconectar();
  
  
     }
  
  // Métodos del ciclo de vida de la actividad
     @Override    protected void onResume() {
           super.onResume();
           // Activamos notificaciones de localización
           manejador.requestLocationUpdates(proveedor, 10000, 1, this);
     }
  
     @Override    protected void onPause() {
           super.onPause();
           // Desactivamos notificaciones para ahorrar batería
           manejador.removeUpdates(this);
     }
  
  //Métodos de la interfaz LocationListener
     public void onLocationChanged(Location location) {
            log("Nueva localización: ");
           muestraLocaliz(location);
     }
  
     public void onProviderDisabled(String proveedor) {
           log("Proveedor deshabilitado: " + proveedor + "\n");
     }
  
     public void onProviderEnabled(String proveedor) {
           log("Proveedor habilitado: " + proveedor + "\n");
     }
  
     public void onStatusChanged(String proveedor, int estado,
           Bundle extras) {
           log("Cambia estado proveedor: " + proveedor + ", estado="
                         + E[Math.max(0,estado)] + ", extras=" + extras +"\n");
     }
  
  //Métodos para mostrar información
     private void log(String cadena) {
           salida.append(cadena + "\n");
     }
  
     private void muestraLocaliz(Location localizacion) {
           if (localizacion == null)
                  log("Localización desconocida\n");
           else
                  log(localizacion.toString() + "\n");
     }
  
     private void muestraProveedores() {
           List&lt;String&gt; proveedores = manejador.getAllProviders();
           for (String proveedor : proveedores) {
               dato_localizacion = stringProveedor(proveedor);
               enviarDato(dato_localizacion);
               log(dato_localizacion); 
           }
           enviarDato("#FIN#");
     }
  
    // private void muestraProveedor(String proveedor) {
      //     log(stringProveedor(proveedor));
     //}
  
     private String stringProveedor(String proveedor) {
         LocationProvider info = manejador.getProvider(proveedor);
         String datos_muestra;
         datos_muestra = ("LocationProvider[ "+"\n getName=" + info.getName()+
                ", \n isProviderEnabled=" + 
                                                 manejador.isProviderEnabled(proveedor)+ 
                ", \n getAccuracy=" + A[Math.max(0, info.getAccuracy())]+
                ", \n getPowerRequirement=" +
                                                  P[Math.max(0, info.getPowerRequirement())]+
                ", \n hasMonetaryCost=" + info.hasMonetaryCost()+
                ", \n requiresCell=" + info.requiresCell()+
                ", \n requiresNetwork=" + info.requiresNetwork()+
                ", \n requiresSatellite=" + info.requiresSatellite()+
                ", \n supportsAltitude=" + info.supportsAltitude()+
                ", \n supportsBearing=" + info.supportsBearing()+
                ", \n supportsSpeed=" + info.supportsSpeed()+" ]\n");
  
         return datos_muestra;
   }
  
  
     public void Conectar() {
         try {
           //Creamos el socket
             sk = new Socket (ip,puerto);
  
              //Comprobamos que ha conectado correctamente
              if (sk.isConnected() == true) {
                  //Inicializamos el buffer de entrada
                  entrada = new BufferedReader(
                          new InputStreamReader(sk.getInputStream()));
                  //Inicializamos el buffer de salida
                  out = new PrintWriter(
                          new OutputStreamWriter(sk.getOutputStream()),true);
                  //Indicamos que esta conectado
                  conectado = true;
  
                  //Recibimos mensaje
                  recibirDatos();
  
              } else {
                  //Indicamos que no esta conectado
                  conectado = false;
              }
          } catch (Exception e) {
              //Si hubo algun error mostramos error
              log(" !!! ERROR  !!! "+ e.toString());
              Log.e("Error connect()", "" + e);
              conectado = false;
          }
     }
  
     public void Desconectar(){
         try{
  
                 sk.close();
         }
         catch (Exception e) {}
  
     }
  
     public void recibirDatos() {
         try{
             //Datos de entrada
             String dato_entrada = entrada.readLine();
             //Mientras que el dato que nos envia el servidor sea distinto del
              //comando #FIN# (que nos indica que no hay mas datos a recibir), 
              //mostramos el dato leido y leemos el siguiente
              log("recibiendo ... "); 
              while (!(dato_entrada.equals("#FIN#"))) {
                  log(dato_entrada);
                  dato_entrada = entrada.readLine();  
              }
  
              //Al salir del bucle es que ha terminado la transmision de datos
              //log("Recibidos todos los datos");
         }
         catch (Exception e) {
             log("Error al recibir los datos del servidor "+ e.toString());
         }
  
     }
  
     public void enviarDato(String datos_out) {
         if(conectado) {
             try {
                 //Enviar dato
                 out.println(datos_out);
                 //Indicamos el fin de la emision con el comando #FIN#
                // out.println("#FIN#");
             }
             catch (Exception e) {
                 log("Error al enviar los datos " + e.toString());
             }
         }
     }
  
  }
  </code></pre>
  
  <p>I suppose the problem is with proxy server but I dont know how to solve it.
  Thanks you in advance for your help and I´m sorry if my English is not well understood.</p>