Sockets em java. Há Solução?

Vendo aquele codigo que vc postou achei que o critério de para não faz sentido:

while (currentThread == thread) {

Assim uma thread vai se acabar sempre que outra começar.

cara, essa é uma sugestão da propria Sun porque o metodo stop() aparece como deprecated no java 6 normalmente com o java 5 eu uso
o laço assim:

while (true) { ... }

estou tentando resolver o problema desta forma:

class TrataSocket extends Thread implements Runnable {
    private Socket socket;

    public TrataSocket(Runnable target, Socket socket) {
        /* aqui uso os parametros recebidos no construtor */
        super(target);
        this.socket = socket;
        start();
    }
    
    public void run() {
        /*  aqui coloco o processo pra tratar os dados enviados 
             pelo cliente */
        ...
    }

}

[quote=destructor]e como uso o flush() no InputStream ??? não encontrei o metodo no netbeans
[/quote]

Nao faz sentido ter flush() no InputStream mesmo ja que tu nao envia dados e sim busca dados. No OutputStream sim faz sentido e ta la.

]['s

simplesmente faça out.flush()

Eu sugeriria que você lesse os oito bytes primeiro e depois trabalhasse com a decodificação do resultado.

Basicamente, isso pode ser resolvido num while mais ou menos como:

OutputStream out = Socket.getOutputStream();
int nRead = 0;
byte[] buffer = new byte[8];
while (out.read() != -1 && nRead &lt 8) {
   byte[nRead] = out.read();
   nRead++;
}

if (nLidos == 8) //Não será 8 se a conexão fechar. read() retornará -1.
    processMessage(buffer);

Usar Channels, Selectors e ByteBuffers é muito legal, aumenta muito o throughput e a performance do servidor, mas não creio que tenha sido a sua dúvida inicial. Se você está começando com sockets, eu sugeriria que você partisse para algo mais simples.

Se quiser mexer com NIO, comece com uma programação similar a com sockets, se beneficiando apenas do SocketChannel e dos ByteBuffers. O ByteBuffer facilita muito o trabalho com os buffers, suporta little e big endian e facilita a leitura de tipos primitivos.

Depois, quando você tiver mais prática e entender as vantagens/desvantagens do sistema multi thread, parta para os selectors.

porra aqui no GUJ tem um artigo bom sobre socket:
http://guj.com.br/java.tutorial.artigo.126.1.guj

ve ai.

faz uma pesquisa que nao tem erro. pelo que voce explicou nao vejo necessidade de usar java.nio so vai te confundir. ao menos por enquanto.