Tengo un problema con un envío de ficheros, el problema es que el socket o hilo, en realidad no se, se bloquea. esta es la clase que usa el cliente y el servidor para el envio y recepción de ficheros. Dejo en claro que esto solo envía ficheros de textos. La verdad es que no tengo problemas al enviar o recibir un fichero de texto por localhost, el problema viene cuando uso internet. Solo logro enviar y recibir textos como por ejemplo el nombre del usuario, dirección, cosas así. Alguien tendría la amabilidad de ayudarme por favor.
Pd: Es un servidor que gestiona multiples clientes. Estas funciones son usadas el metodo run().
El servidor recibe 2 archivos, y responde con un archivo.
Código
package Mensaje; import java.io.*; import java.net.*; import java.util.*; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; /** * Mensaje para pedir un fichero. */ public class DameFichero { { this.socket = socket; } { File archivo; String linea; FileWriter archivoResultado; try { // Apertura del fichero y creacion de BufferedReader para poder // hacer una lectura comoda (disponer del metodo readLine()). // Lectura del fichero int contador = 0; //leemos las lineas que no nos sirven para calcular las notas linea=br.readLine(); linea=br.readLine(); linea=br.readLine();//en esta linea los nombres de las columnas pw.println(linea+"\tPromedio_final");// le agregamos una ultima colum while((linea=br.readLine())!=null) { try { //filtramos por tokens float C1, C2, C3, NE; //quitamos los tokens que no nos sirven for (int i = 0; i < 3; i++) st.nextToken(); //escribimos la nota al final de cada columna pw.println(linea+"\t"+Redondear(getNotaFinal(C1,C2,C3,NE))); } { e.printStackTrace(); } } } e.printStackTrace(); } finally { // En el finally cerramos el fichero, para asegurarnos // que se cierra tanto si todo va bien como si salta // una excepcion. try { fr.close(); br.close(); pw.close(); } e2.printStackTrace(); } } return "resul_"+nombreFileNotas; } { try { // Creamos el archivo que vamos a enviar if(!archivo.exists()) { return ; } // Obtenemos el tamaño del archivo int tamañoArchivo = (int)archivo.length(); // Creamos flujo de entrada para realizar la lectura del archivo en bytes String buffer; int i = 1; /* synchronized (pw1) { */ while((buffer=br1.readLine())!=null) { pw1.println(buffer); try { //Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex); } i++; } // pw1.notify(); //} fr.close(); } { } finally { try { br1.close(); //pw1.close(); } Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex); } } } { try { String buffer; int i = 1; this.socket.getInputStream())); //synchronized (br2) { /* try { br2.wait(); } catch (InterruptedException ex) { Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex); }*/ //br2.notify(); //socket.setSoTimeout(4* 1000); while ((buffer = br2.readLine())!=null) { pw2.println(buffer); try { //Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex); } i++; } } fw.close(); } { //e.printStackTrace(); } finally { pw2.close(); //br2.close(); } } }