Estou tentando implementar uma aplicação servidor que fica escutando uma porta aguardando o envio de um arquivo por parte de clientes atraves da rede, porém, apesar de transferir o arquivo corretamente, as threads criadas não estão morrendo ficando a execução presa na linha depois da leitura do ultimo byte:
while(((rep = Integer.parseInt(readskt.readLine())) != -1)) {
Este é o código do cliente:
package senderfile;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
*
* @author Luciano Pontes
*/
public class SenderFile {
public static void main(String a[]) {
int c;
Socket cltskt=null;
PrintWriter writeskt=null;
File f = new File("C:/okscm/origem/Celltok20710006.txt");
try {
FileInputStream fin = new FileInputStream(f.getAbsolutePath());
try {
System.out.println("preparing the client socket");
cltskt=new Socket("127.0.0.1", 2222);
System.out.println("Done....");
System.out.println(cltskt);
} catch(Exception e) { e.printStackTrace(); }
try {
writeskt=new PrintWriter(cltskt.getOutputStream(),true);
BufferedReader readskt = new BufferedReader(new InputStreamReader(cltskt.getInputStream()));
System.out.println("File Transferring....");
while((c = fin.read()) != -1) {
writeskt.println(c);//to write to the socket
System.out.print(Integer.parseInt(readskt.readLine()) + " - ");
}
// byte buf[] = new byte[fin.available()];
// writeskt.println(buf);
} catch(Exception e) {e.printStackTrace(); }
try {
fin.close();
}catch(IOException e) {}
}catch(FileNotFoundException e) { }
}
}
Este é o código do seridor:
package br.com.okscm.server;
import java.net.*;
import java.io.*;
import java.io.File;
public class ServerReceiver extends Thread {
private Socket conexao;
public ServerReceiver(Socket conexao ){
this.conexao = conexao;
}
public static void main(String a[]) {
try {
// criando um socket que fica escutando a porta 2222.
ServerSocket s = new ServerSocket(2222);
while (true) {
System.out.print("Esperando alguem se conectar...");
Socket conexao = s.accept();
System.out.println(" Conectou!");
// cria uma nova thread para tratar essa conexão
Thread t = new ServerReceiver(conexao);
t.start();
// voltando ao loop, esperando mais alguém se conectar.
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void run(){
ServerSocket serskt=null;
PrintWriter writeskt=null;
int rep;
try {
FileOutputStream fout = new FileOutputStream("C:\okscm\destino_remoto\asin.txt");
try {
System.out.println("Listining...");
writeskt=new PrintWriter(conexao.getOutputStream(),true);
BufferedReader readskt = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
System.out.println("File Recieving...");
try {
while(((rep = Integer.parseInt(readskt.readLine())) != -1)) { // a Execução para aqui depois da leitura do ultimo byte
System.out.print(rep+" - ");
fout.write(rep);
System.out.println(" >>1<< ");
writeskt.println(rep);
System.out.println(" >>2<< "); //break ;
}
System.out.println("Depois>>>");
fout.close();
// fout.write(readskt.read());
} catch(IOException e){}
writeskt.close();
readskt.close();
} catch(Exception e) { System.out.println(e); e.printStackTrace(); }
}catch(FileNotFoundException e){}
}
Se alguém puder me ajudar dicaria grato.
Abraços…