Llamar a un cliente Java en una aplicación de Android

Tengo un cliente que puede enviar información a un servidor a través de TCP:

    public class IR {

    private String host; //server IP address indicated here, I deleted it for posting here
    private int port = 6789;

    private String sentence;
    private String reply;

    public IR(String type) {
        try {

            Socket clientSocket = new Socket(host,port); //IP du server ("localhost" pour un server local) et port utilisé

            DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));


                Gson gson = new GsonBuilder().create();
                FileReader file = new FileReader("data/userInfo.json");
                String json = "";
                int i = 0;
                while ((i = file.read()) != -1)
                    json += (char)i;
                User user = gson.fromJson(json, User.class);
                String user_id = user.getID();
                int bus_id = user.getBusID();

                sentence = "alerte " + type + " " + user_id + " " + bus_id;
                System.out.println("SENTENCE: " + sentence);
                outToServer.writeBytes(sentence + '\n');
                reply = inFromServer.readLine();
                System.out.println("ANSWER: " + reply);

            clientSocket.close();

        }
        catch (Exception io) {
            System.out.println("Connection refusée: arrêt");
        }
    }
}

Llamo a esto en mi aplicación de Android: tengo un botón que usa este método cuando hago clic en él:

public void signalerComplet(View view)
{
    client = new IR("complet");
    Toast.makeText(this, "envoyé", Toast.LENGTH_SHORT).show();
}

Pero mi servidor no recibe nada. Sin embargo, estoy seguro de que mi cliente funciona cuando lo estoy usando, no en mi aplicación de Android. ¿Podría alguien decirme lo que me estoy perdiendo aquí?

EDITAR después de obtener la ayuda de Héctor: el servidor obtiene mi "bloubloubloub" pero obtengo una excepción android.os.NetworkOnMainThreadException en "int size = in.read (data);" ...

private Socket socket;

  public void signalerComplet(View view)
{
    PrintWriter out = null;
    InputStream in=null;

    byte[] data = new byte[5120];

    try {
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    out.println("bloubloubloub" + '\n');
    out.flush();

    try {
        in = socket.getInputStream();
        int size = in.read(data);
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    Log.e("data from server", data.toString());
}
Respuesta 1

Cuando tu lo hagas:

 client = new IR("complet");

Caerá en la instrucción else en su constructor de IR que no hace nada a pesar de cerrar la conexión.

Respuesta: 2

Hola, soy muy nuevo en este campo de la criptografía. Tengo una pequeña duda con respecto a la clave y el algoritmo de firma al usar la herramienta clave para generar pares de claves público-privadas. Solo quiero saber qué es exactamente ...

En Android Studio, tengo un hilo contenido en un método como este (visto a continuación) porque me gustaría reiniciar el hilo cada vez que se llama [1], (recreando el hilo en lugar de reiniciar) público ...

En Java, a menudo necesito obtener perezosamente una entrada de un ConcurrentMap, creando solo si es necesario. Por ejemplo, puedo tener ConcurrentMap <String, AtomicReference <Something>> a = new ...

Estoy ejecutando una aplicación de prueba de Grails todo el día con mi aplicación y está bien. Escribo "grails prod war" para obtener una guerra, y la vuelco en la carpeta webapps de mi instalación de tomcat. Ahora recibo el mensaje como ...