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.
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 < 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.