Salve Gujeiros.
Estou realizando um trabalho da faculdade usando socket que visa o monitoramento do tráfego de dados nos computadores da rede.
Estou com o seguinte problema:
Quando um cliente se conecta ao servidor, é iniciada uma thread no servidor para tratar a conexão com esse cliente e tb é iniciada uma thread no cliente que envia os dados ao servidor a cada intervalo de tempo.
O problema é que ao finalizar a thread no cliente, ele fecha o socket de conexão com o servidor.
Vou colocar aqui os trechos mais importantes do código para tentar mostrar como estou fazendo.
Funcoes.java:
Classe que cria as threads no cliente.
No método monitoraMáquina crio uma nova thread passando como parâmetro o socket de conexão com o servidor.
No método novaThreadCliente coloco essa thread numa List de Threads.
No método executaComando estou recebendo do servidor o comando “kill” pra matar TODAS as threads que estão na minha lista, porém NÃO DESEJO fechar o socket de conexão.
public class Funcoes implements ThreadListener{
private Socket socket;
private List<ClienteThread> threadsEmExecucao = new ArrayList<ClienteThread>();
public String executaComando(Socket socket, String comando){
if (com[0].equals("kill")){
for (ClienteThread clienteExecucao : threadsEmExecucao){
clienteExecucao.pararThread();
}
}
}
private void monitoraMaquina(Socket socket, List<String> dados, String tempo, String quantidade) {
Runnable runnable = new ClienteThread(socket, dados, tempo, quantidade, this);
Thread threadCliente = new Thread(runnable);
threadCliente.start();
}
public void novaThreadCliente(ClienteThread thread) {
threadsEmExecucao.add(thread);
}
}
ClienteThread.java:
Thread que fica enviando dados ao servidor.
Como pode ser visto, na classe Funcoes faço a chamada do método pararThread() que seta a flag que controla o while{} para false forçando o término da Thread.
public class ClienteThread implements Runnable {
public ClienteThread(Socket socket, List<String> dados, String tempo, String quantidade, ThreadListener listener) {
this.socket = socket;
this.dados = dados;
this.tempo = tempo;
this.quantidade = quantidade;
this.listener = listener;
runThread = true;
}
public void run(){
try {
out = new PrintWriter(socket.getOutputStream(), true);
listener.novaThreadCliente(this);
while (runThread) {
// envia string ao servidor
Thread.sleep(Integer.parseInt(tempo));
}
} catch (Exception e){
}
}
public void pararThread(){
runThread = false;
}
}
Porém, quando minha Thread é finalizada, o socket tem sua conexão fechada.
Alguém sabe como posso terminar essa thread sem fechar minha conexão com o socket?
Espero que tenha sido claro. Qualquer dúvida é só perguntar. 
Se alguém puder ajudar, agradeço.
[]'s