Передайте входной поток сокета методу receivefile вместо самого сокета:
InputStream is = webServerSocket.getInputStream();
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(is));
receiveFile(webServerSocket,filesize,filename);
Проблема заключается, я полагаю, в том, что у вас есть два входных потока из одного и того же сокета, сделанные в один и тот же момент времени (до того, как какие-либо данные будут фактически прочитаны). Они указывают на один и тот же поток, но чтение из одного не перемещает также и другой, поэтому после чтения из inputtreamBA он отмечен в позиции 15 (например), в то время как поток A все еще находится в позиции 0 в начале потока.
(EDIT :)
Конечно, вы должны использовать входной поток в методе receiveFile вместо того, чтобы получать его из сокета. Другим решением будет получение входного потока из сокета после вызова для получения файла, как в
receiveFile(webServerSocket,filesize,filename);
BufferedReader inFromServer =
new BufferedReader(new InputStreamReader(webServerSocket.getInputStream()));