When I transfer a large file using socket programming, the resulting file is incomplete, i.e. This is an mp3 file that, when I play, sounds strange. Code:
Server side:
File myFile = new File("abc.mp3"); { Socket sock = servsock.accept(); int packetsize=1024; double nosofpackets=Math.ceil(((int) myFile.length())/packetsize); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile)); for(double i=0;i<nosofpackets+1;i++) { byte[] mybytearray = new byte[packetsize]; bis.read(mybytearray, 0, mybytearray.length); System.out.println("Packet:"+(i+1)); OutputStream os = sock.getOutputStream(); os.write(mybytearray, 0,mybytearray.length); os.flush(); } }
Client side:
int packetsize=1024; FileOutputStream fos = new FileOutputStream("zz.mp3"); BufferedOutputStream bos = new BufferedOutputStream(fos); double nosofpackets=Math.ceil(((int) (new File("abc.mp3")).length())/packetsize); for(double i=0;i<nosofpackets+1;i++) { InputStream is = sock.getInputStream(); byte[] mybytearray = new byte[packetsize]; int bytesRead = is.read(mybytearray, 0,mybytearray.length ); System.out.println("Packet:"+(i+1)); bos.write(mybytearray, 0,mybytearray.length); } sock.close(); bos.close();
On the client side, I used new File("abc.mp3")).length only for simplicity (I could send the length of the file from the server side).
This code works fine if the client and server are the same machine, but the file gets corrupted if they are on different machines.
source share