galera o meu sistema esta travando quando chamo o socket.accept(), alguem pdoe me explicar o pq?
Problemas com Socket
6 Respostas
Amigão, por favor coloque mais detalhes.
Por telepatia fica difícil.
Abraço!
O metodo accept so ira funcionar “destravar” caso algum cliente esteje solicitando uma requisição. Em outras palavras ele esta esperando por um conexão de um cliente.
Crio um objeto do tipo ServerSocket e quando vou chamar o metodo accept() trava…
ServerSocket server = new ServerSocket(1099);
server.accept();
alguem pode me ajudar?
A entendi ele e um ouvinte ou seja deve exister dentro dele algo como um while(true)…mas assim eu preciso que outras coisas sejam executadas depois desse cara, ou seja eu preciso continuar a rodar meu programa e ao mesmo tempo continuar ouvindo alguem pode me ajudar?
O objeto ServerSocket é configurado por padrão para “bloquear” indefinidamente a execução da Thread que o chamou, até que seja feita alguma tentativa de conexão na porta ao qual ele está configurado para “ouvir” conexões. Depois que for estabelecida a conexão, o fluxo do seu código prossegue normalmente depois da chamada do método “accept()”. Se você precisa fazer alguma coisa enquanto escuta conexões, é melhor você ir estudar Threads em Java, conseguindo executar códigos de forma paralela.
Se você quiser que o método “accept()” de um objeto ServerSocket não “trave” indefinidamente após a chamada do método “accept()”, você pode cofigurar esse tempo de espera, usando o método “setSoTimeout(int timeout)” do mesmo objeto ServerSocket, passando o tempo de espera em milissegundos. Só que caso esse tempo de espera “estoure”, o método “accept()” desse objeto ServerSocket irá lançar exceção.
Inté.
A alternativa mais fácil é usar outra thread, como já foi explicado.
Outra alternativa é usar a classe SocketChannel e os Selectors. É mais escalável, mas mais complicadinha.