Ola pessoal deixa eu explicar um pouquinho do meu programa pra vocês entenderem o problema: o meu programa visa buscar uma máquina remota dados de um determinado arquivo atraves de sockets. o cliente solicita os dados do arquivos o servidor recebe a mensagem de qual arquivo e envia as linhas do arquivo ao cliente, acontece que eu só consigo listar os dados no cliente quando eu fecho o programa no servidor, a impressão é que ele entra em loop infinito ao seja ele envia os dados perfeitamente, mas só passa pra linha que lista os dados no cliente quando se fecha o programa no servidor segue abaixo os codigo pra vcs me ajudarem. desde já eu agradeço.
classe servidor:
public class socket extends Thread{
leArquivo arquivo = new leArquivo();
Socket socket = null;
ServerSocket servidor =null ;
//CONSTRUTOR QUE IRA RECEBER A CONEXÃO//
public socket(Socket s){
socket = s;
}
//METODO ESTÁTICO INICIO DO PROGRAMA
public static void main (String[] args){
try {
ServerSocket server = new ServerSocket(7002);
while(true){
System.out.println("Esperando alguém conectar");
Socket s = server.accept();
System.out.println("o cliente :"+ s.getRemoteSocketAddress());
Thread t = new socket(s);
t.start();
}
}
catch (IOException e) {
System.out.println("IOException: " + e);
}
}
//CODIGO DA THREAD
public void run(){
try {
BufferedReader entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream saida = new PrintStream(socket.getOutputStream());
leArquivo arquivo = new leArquivo();
arquivo.leitura(entrada.readLine());
int i =0;
while(i<arquivo.dados.size()){
saida.println(arquivo.dados.get(i));
i++;
}
} catch (IOException ex) {
Logger.getLogger(socket.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void sleep(int s){
try {
Thread.sleep(s);
} catch (InterruptedException ex) {
Logger.getLogger(socket.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Classe Cliente:
public class cliente extends Thread {
Socket soc = null;
BufferedReader entrada;
PrintStream saida;
ArrayList dados;
String linha = null;
public cliente(Socket s){
soc = s;
}
// CODIGO DA THREAD
public void run(){
try {
saida("/etc/dansguardian/bannedsitelist");
entrada = new BufferedReader(new InputStreamReader(soc.getInputStream()));
dados = new ArrayList();
while((linha=entrada.readLine())!=null){ // AQUI ESTA O PROBLEMA NESSE WHILE FICA COM LOOP INFINITO //
dados.add(linha);
}
int i=0;
while(i<dados.size()){
System.out.println(dados.get(i));
i++;
soc.close();
}
} catch (IOException ex) {
Logger.getLogger(cliente.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void saida(String s){
try {
saida = new PrintStream(soc.getOutputStream());
} catch (IOException ex) {
Logger.getLogger(cliente.class.getName()).log(Level.SEVERE, null, ex);
}
saida.println(s);
}
public static void main (String[] args){
try {
Socket s = new Socket("192.168.1.254", 7002);
Thread t = new cliente(s);
t.start();
} catch (UnknownHostException ex) {
Logger.getLogger(cliente.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(cliente.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void sleep(int s){
try {
Thread.sleep(s);
} catch (InterruptedException ex) {
Logger.getLogger(cliente.class.getName()).log(Level.SEVERE, null, ex);
}
}
}