при передаче файлов они повреждаются с помощью Java-сокетов - PullRequest
1 голос
/ 20 ноября 2011

Я играл с сокетами Java и пытался передавать файлы с сервера на клиент, однако, когда они получают передачу, они повреждены.Это код с сервера:

DataInputStream input;
DataOutputStream ouput;
//these two variable are initialized somewhere else in the code.
private void downloadFile() {
    try {
        String fileName= input.readUTF();
        File f = new File(path + fileName);
        size= f.length();
        file= new FileInputStream(path+ fileName);
        ouput.writeLong(size);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = file.read(buffer)) > 0) {
            output.write(buffer, 0, len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

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

public void downloadFile(String fileName) {
    try {
        this.client= new Socket(ip,port);
        DataInputStream input= new DataInputStream(this.client.getInputStream());
        DataOutputStream ouput= new DataOutputStream(this.client.getOutputStream());

        output.writeUTF("DOWNLOAD");
        output.writeUTF(fileName);

        File f = new File(path+ fileName);
        file = new FileOutputStream(f);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = input.read(buffer)) > 0) {
            file.write(buffer, 0, len);
        }
        file.flush();
        file.close();
        this.client.close();
    } catch (Exception e) {
        System.out.println("something went wrong");
    }
}

Я не знаю, что я делаю неправильно, файл получает полную передачу, но не правильно.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2011

на сервере:

ouput.writeLong(size);

вы, кажется, не обрабатываете это на стороне клиента, вы просто добавляете его в загруженный файл, как если бы он был частью двоичных данных.

1 голос
/ 20 ноября 2011

Похоже, вы отправляете длину файла с сервера клиенту:

    ouput.writeLong(size);

но ваш клиентский код никогда не делает ничего с переданным размером, поэтому он занимает первые несколько байтов файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...