传输文件时,它们会被Java套接字损坏

时间:2011-11-20 06:25:57

标签: java sockets client-server

我正在玩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 个答案:

答案 0 :(得分:3)

在服务器上:

ouput.writeLong(size);

您似乎无法在客户端处理此问题,只需将其附加到下载的文件中,就像它是二进制数据的一部分一样。

答案 1 :(得分:1)

看起来您将文件的长度从服务器发送到客户端:

    ouput.writeLong(size);

但是你的客户端代码从不对传输的大小做任何事情,所以它占用了文件的前几个字节。