Thread e Socket

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…

Bem, estou usando sockets atualmente e o que eu faço é criar uma variável static do tipo boolean e coloco na condição do while, assim:

[code] private static boolean loop = true;
public static void startListen(){
loop = true;
while( loop ){
recebe dados;
}
}

public static void stopListen(){
loop = false;
}[/code]