Большой файл передача через сокеты

Когда я передаю большой файл с помощью программирования сокета, полученный файл является неполным, т.е. это mp3-файл, который при воспроизведении звучит странно. Код следующий:

Сторона сервера:

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();
    }
}

Сторона клиента:

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();

На стороне клиента я использовал новый файл ("abc.mp3")). Length для простоты (я мог бы отправьте длину файла со стороны сервера).

Этот код отлично работает, если клиент и сервер - одна и та же машина, но файл искажается, если они находятся на разных машинах.

5
задан marcospereira 26 January 2016 в 01:40
поделиться