Hola, disculpame que no me detube mucho a leer tu codigo, tambien estoy buscando unas cuestiones para mañana
. Pero en algun momento hice algo de sockets con threads, espero te sirva...(quizas hay mas cosas de las q necesites o quizas te de una idea para ampliar tu pryecto)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.URL;
class GestorPeticion implements Runnable
{
static Logger logger = Logger.getLogger(GestorPeticion.class);
Thread t;
BufferedReader entradas =null;
FileInputStream entrada = null;
//PrintWriter salida = null;
Socket s;
String archivo = null;
String info = null;
Ubicador ubicador = new Ubicador();
/**
* Método que abre socket para almecenar los datos enviados por el cliente y se le envia la ruta del archivo
* recibido al desglozador
* @param Socket coneccion entrante
*/
public GestorPeticion(Socket s)
{
t = new Thread(this);
t.start();
this.s = s;
}
@Override
public void run()
{
URL url = GestorPeticion.class.getResource("Info.properties" );
PropertyConfigurator.configure(url);
try
{
Desglozador desglozador = new Desglozador();
//BUFER PARA DESCARGAR LO QUE EL CLIENTE NOS ESTÁ ENVIANDO
//recibo el nombre del archivo
entradas = new BufferedReader(new InputStreamReader(s.getInputStream()));
String nombArchivo = entradas.readLine();
System.out.println("Archivo Recibido: " + nombArchivo+" de "+s);
//recibo archivo
archivo = nombArchivo;
InputStream in = s.getInputStream();
//info en log
logger.info("Abriendo archivo: " + nombArchivo +" de " + s);
//depende el prefijo del archivo, le otorgo la ubicacion correspondiente
String direccion = ubicador.ruta(nombArchivo);
//crear archivo en disco
try
{
String auditado = direccion+"audit-"+nombArchivo;
FileOutputStream out = new FileOutputStream(new File(auditado));
byte[] buf = new byte[1024]; // bufer de 1k
int len = 0;
int tlen = 0;
// System.out.println(in.toString());
while ((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
tlen = tlen + len;
}
out.close();
//hacer checksum "jacsum"
System.out.println("Archivo recibido: "+auditado);
logger.info(tlen+ " bytes almacenados en " + auditado+" de "+s);
System.out.println(tlen+ " bytes almacenados en " + auditado+" de "+s);
in.close();
desglozador.desglozar(auditado);//desgloza el archivo entrante para almacenar en la BD
}
//excepcion por inexistencia del directorio de almacenaje
catch(Exception e)
{
//System.out.println(e);
logger.info(e);
in.close();
}
}//fin try
catch (Exception e)
{
e.printStackTrace();
}
}// fin run