Socket android não envia nova mensagem apos receber resposta do servidor

olá pessoal, tenho um código socket que funciona porém, após receber a resposta do servidor não consigo enviar uma nova mensagem, apenas se eu fechar o app e abri-lo novamente. alguém poderia me apontar a solução? Sou iniciante em programação android então desculpem qualquer coisa.
segue código do cliente:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.*;
import android.view.View;
import android.widget.TextView;

import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    private Button btnSend;
    private TextView txtStatus;
    private TextView txtValor;
    private TextView txtHostPort;
    private SocketTask st;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnSend = (Button) findViewById(R.id.btnSend);
        txtStatus = (TextView) findViewById(R.id.txtStatus);
        txtValor = (TextView) findViewById(R.id.txtValor);
        txtHostPort = (TextView) findViewById(R.id.txtHostPort);
        btnSend.setOnClickListener(btnConnectListener);
    }
    private View.OnClickListener btnConnectListener = new View.OnClickListener() {
        public void onClick(View v) {
            // Recupera host e porta
            String hostPort = txtHostPort.getText().toString();
            int idxHost = hostPort.indexOf(":");
            final String host = hostPort.substring(0, idxHost);
            final String port = hostPort.substring(idxHost + 1);
            // Instancia a classe de conexão com socket
            st = new SocketTask(host, Integer.parseInt(port), 5000) {
                @Override
                protected void onProgressUpdate(String... progress) {
                    SimpleDateFormat sdf = new SimpleDateFormat(
                            "HH:mm:ss");
                    // Recupera o retorno
                    txtStatus.setText(sdf.format(new Date()) + " - "
                            + progress[0]);
                    
                }


            };

            st.execute(txtValor.getText() == null ? "" : txtValor.getText()
                    .toString(), ""); // Envia os dados
            
        }
    };
    @Override
    protected void onDestroy() {
    super.onDestroy();
    st.cancel(true);
        
    }
}

THREAD SEPARADA:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import android.os.AsyncTask;
import android.util.Log;

import static java.lang.System.out;

/**
 * Created by DMP01 on 29/10/2017.
 */

public abstract class SocketTask extends AsyncTask<String, String, Boolean> {
    private Socket socket;
    private InputStream is;
    private OutputStream os;
    private String host;
    private int port;
    private int timeout;
    /**
     * Construtor com host, porta e timeout
     *
     * @param host
     *            host para conexão
     * @param port
     *            porta para conexão
     * @param timeout
     *            timeout da conexão
     */
    public SocketTask(String host, int port, int timeout) {
        super();
        this.host = host;
        this.port = port;
        this.timeout = timeout;
    }
    /**
     * Envia dados adicionais se estiver conectado
     *
     * @param data
     *            dados addicionais
     * @throws IOException
     */
    public void sendData(String data) throws IOException {
        if (socket != null && socket.isConnected()) {
            os.write(data.getBytes());
            }
    }
    @Override
    protected Boolean doInBackground(String... params) {
        boolean result = false;
        try {
            SocketAddress sockaddr = new InetSocketAddress(host, port);
            socket = new Socket();
            socket.connect(sockaddr, timeout); // milisegundos
            if (socket.isConnected()) {
                publishProgress("CONECTADO");
                is = socket.getInputStream();
                os = socket.getOutputStream();
                for (String p : params) {
                    os.write(p.getBytes("ISO-8859-1"));


                }

                byte[] buff = new byte[2048];
                int buffData = is.read(buff, 0, 2048);

                while (buffData != -1)

                {

                    String response = new String(buff);
                    publishProgress(response);
                    buffData = is.read(buff, 0, 2048);

                }


            } else {
                publishProgress("CONNECT ERROR");
            }
        } catch (IOException e) {
            publishProgress("ERROR");
            Log.e("SocketAndroid", "Erro de entrada e saida", e);
            result = true;
        } catch (Exception e) {
            publishProgress("ERROR");
            Log.e("SocketAndroid", "Erro generico", e);
            result = true;
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
                if (os != null) {
                    os.close();
                }
                if (socket != null) {
                    socket.close();

                }
            } catch (Exception e) {
                Log.e("SocketAndroid", "Erro ao fechar conexao", e);
            }
        }


        return result;
    }
}