title: Java multiple file transfer over socket
body: <p>Ok, trying to transfer a specified directory of files over a socket, remove the directory objects from the arraylist, so only files are left, and transfer them 1 by 1 over the same socket.  The arraylist here is filled with ONLY files, no directories.  Heres the receive and send code for the client and server respectively .  The code runs fine without errors, except for ALL the data is being written to the first file.  The subsequent files are created in the server folder, but they are 0 bytes.  Any input would be greatly appreciated.</p>
  
  <p>THIS IS THE SERVER CODE FOR RECEIVING THE FILES</p>
  
  <pre><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&lt;File&gt;files = new ArrayList&lt;File&gt;(number);
          System.out.println("Number of Files to be received: " +number);
          //read file names, add files to arraylist
          for(int i = 0; i&lt; 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 &lt; 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></pre>
  
  <p>THIS IS THE CLIENT CODE FOR SENDING THE FILES</p>
  
  <pre><code>public void send(ArrayList&lt;File&gt;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 &lt; 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 &lt; 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></pre>