Versão atual:

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

Versões(2):

Ver a versão formatada

Como implementar dois ouvinte de mensagem Socket TCP/IP

Comentário

new question