1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Como implementar dois ouvinte de mensagem Socket TCP/IP

Ola pessoal.

Estou tentando implementar duas formas de fazer uma requisição a um servidor socket (TCP/IP), a primeira forma, é a tradicional, executa o read() em uma thread separada para ficar ouvindo as mensagens do servidor

//Ouvindo das mensagens em uma thread separada
public void run()
{
    //..Instancia do socket..//
    inStream = socket.getInputStream();
    outStream = socket.getOutputStream();
    byte[] buffer = new byte[4096];
    int read = inStream.read(buffer, 0, 4096);

    while (read > -1) {
        Resposta byteParaResposta = new Resposta(buffer, read);
        read = inStream.read(buffer, 0, 4096);
    }
}

Então, surgiu a necessidade de um método para enviar mensagem ao servidor e aguardar a resposta do mesmo.

Com a implementação desse método, ao chamar o read() a aplicação fica parada, e as mensagens enviadas pelo servidor não são capturadas por esse cliente, a aplicação so continua o processo caso o servidor seja finalizado

//Envia mensagem e aguarda a resposta do servidor
public void enviarMensagem(byte[] mensagem)
{
    outStream.write(mensagem);
    byte[] buffer = new byte[4096];
    int read = inStream.read(buffer, 0, 4096);  // Chegando aqui, a resposta enviada pelo servidor não é capturada nem no método run(), 
                                                // a aplicação só volta fechando o servidor do socket

    return new Resposta(buffer, read);
}

Existe alguma forma de fazer isso? Caso não consiga a solução, farei essa chamada via WebService, mas acredito que não seja o ideal

Muito obrigado! Abraço

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags sockets ou faça a sua própria pergunta.