I have two problems with my java server-client file communication,
I have the CLIENT sends files over to the server and the SERVER receives the files.
My 2 issues are:
1) whenever i send a file, it is 8 bytes less (i do not know why)
2) the file transfer is not complete (with 8 bytes less) unless i close the socket, which i do not want. i want my connection to be persistent, so how can i send a EOF from the client to the server.
here is my client who sends files
public void sendFiles(String file)  {
        try {
            File myFile = new File(file);
            long length = myFile.length();
            byte[] buffer = new byte[8192];
            System.out.println(length);
            FileInputStream in = new FileInputStream(myFile);
            BufferedInputStream bis = new BufferedInputStream(in);
            BufferedOutputStream outF = new BufferedOutputStream(sock.getOutputStream());
            out.print("%SF%" + length + "$" + myFile.getName() + "#");
            out.flush();
            int count;
            while ((count = in.read(buffer)) > 0) {
                outF.write(buffer, 0, count);
            }
            outF.flush();
            in.close();
            bis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
}
SERVER who receives files.
I'm passing the name and the length of the file but only using the name of the file. however, i don't know if i need to use the length of the file or not, in case of EOF or something. Please advice
Also, The code hangs in
while ((count = this.sock.getInputStream().read(buffer)) > 0) {
due to no EOF which i do not know how to implement
public void recvFile(String fileName, int length) {
try {
    byte[] buffer = new byte[8192];
    FileOutputStream outF = new FileOutputStream("/Users/Documents" +fileName);
    BufferedOutputStream bos = new BufferedOutputStream(outF);
    int count = length;
    while ((count = this.sock.getInputStream().read(buffer)) > 0) {
        bos.write(buffer, 0, count);
    }
    bos.close();
} catch (IOException ex) {
    ex.printStackTrace();
}
}
UPDATE: I have removed the flush() as advised that it is not needed. Also, i have tested this code in a different class and it worked but it doesn't work here with client-server chat. Could anyone tell me why?
Any help or hints would be appreciated. Thank you.
 
     
    