Ir ao conteúdo
  • Cadastre-se

dhericky

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

0
  1. 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); } } 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; } }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!