Tenho uma aplicação cliente-servidor que tem como objetivo compartilhar telas do servidor com os clientes (compartilhamento de tela de um professor com seus alunos).
Estou tentando uma abordagem single-thread. Ou seja o servidor abre uma única thread que fica capturando a tela e enviando para cada um dos usuário conectados (armazenados em um ArrayList). Meu problema é o seguinte, quero que quando o aluno feche o navegador (o cliente é uma applet), o cliente envie uma mensagem para o servidor avisando que quer desconectar, para que o servidor feche a conexão…
Tem como eu colocar um read não bloqueante dentro deste laço no meu método run. Coisa do tipo, se tiver alguma mensagem de um cliente, a leio e trato a desconexão, senão, continua fazendo o laço normalmente?
É que Com MulticastSocket eu uso, invariavelmente, o protocolo UDP…E, em várias redes eu tenho problemas com UDP…Além do mais, o datagrama tem um limite de volume de dados que é menor do que eu preciso. Já dividi em mais de um datagrama, todavia, no cliente raramente consigo receber todos os pacotes necessários para montar um única tela…
Talvez vocês tenham alguma sugestão sobre a utilização do UDP que eu ainda não consegui ver…
Mas mesmo assim, a leitura não bloqueante ainda me gera dúvidas
Para fazer leitura não-bloqueante, você pode usar NIO, mas aí você precisa entender como é que isso funciona porque é bastante difícil de usar. (Talvez você precise se conectar à Matrix, como o Neo )