Java клиент-сервер отправляющий файл Streams

1

Я пытаюсь написать очень простое клиент-серверное приложение, где клиент отправляет текстовый документ.docx-format и сервер получает просто.

Моя проблема в том, что полученный файл (mupp.docx) поврежден, согласно слову: http://www.ladda-upp.se/files/2014/b126506.jpg

Я не уверен, где я ошибаюсь. То, что Im unsure:

* Должно ли последнее чтение, когда fis.read(b) возвращает -1, записывается в файл? К выходу клиента?

* Я слишком часто сливаю?

* У меня неправильный размер байта [] b?

Ive попытался перемещаться по разрыву if (x == -1); в обеих программах без успеха. Я не знаю, что случилось:/У вас?

public class FileSender{
public static void main(String ar[])throws Exception{

    Socket clientSocket=new Socket("127.0.0.1",1234);
    System.out.println("connected");
    OutputStream out=clientSocket.getOutputStream();
    FileInputStream fis=new FileInputStream("lupp.docx");

    int x=0;
    byte[] b = new byte[256];

    while(true){
        x=fis.read(b);
        if(x==-1)break;
        out.write(b);
        out.flush();

    }
    fis.close();
    out.close();
}
}

public class FileReceiver{
public static void main(String ar[])throws Exception{        
    ServerSocket ss=new ServerSocket(1234);
    Socket clientSocket=ss.accept();

    InputStream in=clientSocket.getInputStream();
    FileOutputStream fos=new FileOutputStream("mupp.docx");

    int x=0;
    byte[] b = new byte[256];

    while(true){
        x=in.read(b);
        if(x==-1)break;
        fos.write(b);
        fos.flush();
    }
    in.close();
    fos.close();
}
}
Теги:
server
client
inputstream

1 ответ

1
Лучший ответ

измените out.write(b) и fos.write(b) на fos.write(b, 0, x); Это устранит ошибку.

  • 0
    Да, это так! Но ... почему это работает сейчас?
  • 0
    Это потому, что мы не всегда читаем весь буфер. x представляет количество прочитанных байтов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню