Your reading code on the server side should look the same as on the client side.
// copy from bis to bos, using a buffer.
for(int len; (len = bis.read(buffer)) > 0) {
bos.write(buffer, 0, len);
}
On the client side you want
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filename));
BufferedOutputStream bos = new BufferedOutputStream(clientSocket.getOutputStream());
on the server side you want.
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));
when finished you want to
bos.close();
bis.close();
If you are going to use an ObjectOutputStream (and I suggest you don't) you need to use only this stream, not a mixture of streams.