Java: Ler de um Socket stream

Fr33d

Membro
Boas pessoal,

Tenho um pequeno problema ao ler de um socket em java.
Quero implementar algo do genero peer to peer usando TCP, na verdade preciso de ler de um socket (se houver algo para ler) e depois tenho de ver se há algo para enviar. Ou seja, ando numa rotina de escuta ->envio->escuta->envio... e por aí vai.

Estou a usar a classe DataInputStream, porque para além de me deixar ler bytes, permite-me especificar o número de bytes a ler. O problema é que a função read (e outros afins desta função) é bloqueante, o que torna a rotina um pouco mais complicada, ou seja, não consigo continuar a tentar enviar bytes, porque a thread bloqueia-se a tentar ler do socket.

Será que existe uma versão de um read(mesmo que noutra classe) que não se bloqueie? tou farto de pesquisar e nada se adequa. Notem que não quero coisas como readLine's, porque eu quero ler um numero especifico de bytes.


Espero ter-me explicado bem.... Desde já obrigado pela ajuda.
 
Boas pessoal,

Tenho um pequeno problema ao ler de um socket em java.
Quero implementar algo do genero peer to peer usando TCP, na verdade preciso de ler de um socket (se houver algo para ler) e depois tenho de ver se há algo para enviar. Ou seja, ando numa rotina de escuta ->envio->escuta->envio... e por aí vai.

Estou a usar a classe DataInputStream, porque para além de me deixar ler bytes, permite-me especificar o número de bytes a ler. O problema é que a função read (e outros afins desta função) é bloqueante, o que torna a rotina um pouco mais complicada, ou seja, não consigo continuar a tentar enviar bytes, porque a thread bloqueia-se a tentar ler do socket.

Será que existe uma versão de um read(mesmo que noutra classe) que não se bloqueie? tou farto de pesquisar e nada se adequa. Notem que não quero coisas como readLine's, porque eu quero ler um numero especifico de bytes.


Espero ter-me explicado bem.... Desde já obrigado pela ajuda.

Esta suposto bloquear! Por principio, não podes continuar a executar o procedimento se ainda não recebeste os dados da rede... certo?

O que tens de fazer é criar uma Thread (java.util.Thread) que execute o processo de leitura em paralelo. E sincronizar a leitura/escrita de dados para a Socket.
Mais, se estiveres a utilizar SWING, aconselho utilizar utilizar um SwingWorker
Da uma vista de olhos aqui... http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html
 
Back
Topo