Java socket transfer, buffered input and output
<p>Ok.... Trying to learn  java on my own, been having trouble with this for awhile.  I'm trying to transfer a large file over the network using sockets and buffered input and output streams.  Doesn't matter what size file I try to transfer.  Hopefully I posted my code correctly, I know theres probably many problems with this code, although it compiles and runs ok, I get an IndexOutOfBoundsException the second the client and server go into the while loops, the server gets it during the first bis.read(buf,0,len) and the client gets it during the while(off = fis.read(buf,0,len)..... Any help would be greatly appreciated</p>

<pre><code>//Server Receive code receive method and main for testing
    public File receive(Socket socket) throws IOException{

        //temporarily hard coded filename
        File file = new File("C:\\users\\tom5\\desktop\\sales\\input.dat");
        DataInputStream dis = new DataInputStream(socket.getInputStream());
        FileOutputStream fos = new FileOutputStream(file);
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        //reads file length from datainputstream
        int len = dis.readInt();
        dis.close();
        int bytesRead=0;
        //create buffer
        byte[]buf = new byte[4092];
        int off = 0;

        //read from BufferedInputStream and write to FileOutputStream?
        while(bytesRead &lt; len) {
            bis.read(buf,0,len);
            fos.write(buf,0,len);
            bytesRead++;
        }
        fos.close();
        bis.close();
        return file;
    }
    public static void main(String[]args) throws IOException{
        Server server = new Server();
        Socket socket =server.accept();
        File file = server.receive(socket);
    }
}

//Client sending code

    public void send(Socket socket,File file) throws IOException{
        FileInputStream fis = new FileInputStream(file);
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        int len = (int)file.length();
        dos.writeInt(len);
        dos.flush();
        dos.close();
        System.out.println(file.length());

        byte[]buf = new byte[4092];
        int off= 0;
        while((off = fis.read(buf,0,len)) != -1  ){
            bos.write(buf,0,len);       
        }
    }

    public static void main(String[]args) throws UnknownHostException, IOException{
        Client client = new Client();
        Socket socket =client.connect("localhost",1055);
        File file = new File("C:\\users\\tom5\\desktop\\movie.avi");
    }
}
</code></pre>
