Java transferencia de archivos múltiples a través de socket
De acuerdo, al intentar transferir un directorio específico de archivos a través de un socket, elimine los objetos del directorio de la lista de arrays, así que solo quedan los archivos, y transfiéralos 1 por 1 sobre el mismo socket. El arraylist aquí está lleno de SOLO archivos, no directorios. Aquí está el código de recibir y enviar para el cliente y el servidor respectivamente. El código funciona bien sin errores, excepto por TODOS los datos que se están escribiendo en el primer archivo. Los archivos subsiguientes se crean en la carpeta del servidor, pero son 0 bytes. Cualquier contribución será muy apreciada.
ESTE ES EL CÓDIGO DE SERVIDOR PARA RECIBIR LOS ARCHIVOS
<code>public void receive(){ try { DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream())); DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); //read the number of files from the client int number = dis.readInt(); ArrayList<File>files = new ArrayList<File>(number); System.out.println("Number of Files to be received: " +number); //read file names, add files to arraylist for(int i = 0; i< number;i++){ File file = new File(dis.readUTF()); files.add(file); } int n = 0; byte[]buf = new byte[4092]; //outer loop, executes one for each file for(int i = 0; i < files.size();i++){ System.out.println("Receiving file: " + files.get(i).getName()); //create a new fileoutputstream for each new file FileOutputStream fos = new FileOutputStream("C:\\users\\tom5\\desktop\\salestools\\" +files.get(i).getName()); //read file while((n = dis.read(buf)) != -1){ fos.write(buf,0,n); fos.flush(); } fos.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } </code>
ESTE ES EL CODIGO DE CLIENTE PARA ENVIAR LOS ARCHIVOS
<code>public void send(ArrayList<File>files){ try { DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream())); DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); System.out.println(files.size()); //write the number of files to the server dos.writeInt(files.size()); dos.flush(); //write file names for(int i = 0 ; i < files.size();i++){ dos.writeUTF(files.get(i).getName()); dos.flush(); } //buffer for file writing, to declare inside or outside loop? int n = 0; byte[]buf = new byte[4092]; //outer loop, executes one for each file for(int i =0; i < files.size(); i++){ System.out.println(files.get(i).getName()); //create new fileinputstream for each file FileInputStream fis = new FileInputStream(files.get(i)); //write file to dos while((n =fis.read(buf)) != -1){ dos.write(buf,0,n); dos.flush(); } //should i close the dataoutputstream here and make a new one each time? } //or is this good? dos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } </code>