Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中使用Socket的文件上传_Java_Sockets - Fatal编程技术网

java中使用Socket的文件上传

java中使用Socket的文件上传,java,sockets,Java,Sockets,当我尝试使用java中的套接字将文件从客户端设备上载到服务器时。它被上传到服务器,但问题是,当我试图打开它时显示一些错误。例如:如果我将照片从客户端上传到服务器,它会被上传,但当我试图打开它时显示错误不支持的文件格式 客户端: DataOutputStream dos = new DataOutputStream(tmp.getClientSocket().getOutputStream()); BufferedInputStream fileReader=new BufferedInp

当我尝试使用java中的套接字将文件从客户端设备上载到服务器时。它被上传到服务器,但问题是,当我试图打开它时显示一些错误。例如:如果我将照片从客户端上传到服务器,它会被上传,但当我试图打开它时显示错误不支持的文件格式

客户端:

DataOutputStream dos = new DataOutputStream(tmp.getClientSocket().getOutputStream());
    BufferedInputStream fileReader=new BufferedInputStream(new FileInputStream(f));
    byte[] buffer = new byte[1024];
    int byteRead=0;
    while((byteRead=fileReader.read(buffer))!=-1) {
        dos.write(buffer,0,byteRead);
        dos.flush();
        System.out.println("uploading "+byteRead);
    }

    fileReader.close();


    System.out.println("uploading file completed");
服务器端:

String filename=this.input.readLine();
    System.out.println("file to be upload is "+filename);
    InputStream inputByte=socket.getInputStream();
    BufferedInputStream input=new BufferedInputStream(inputByte);

    String response=this.input.readLine();
    if(response.equals("start")) {

    BufferedOutputStream outputFile=new BufferedOutputStream(new FileOutputStream(projectDirPath+"\\"+filename));
    byte[] buffer =new byte[1024];
    int byteRead=0;

    while((byteRead=input.read(buffer))!=-1) {

        outputFile.write(buffer,0,byteRead);
        outputFile.flush();
        System.out.println("uploading "+byteRead);
    }
    outputFile.close();

    }else {
        System.out.println("nothing to upload");
    }
客户端:

    String path = "path";
    String fileName = "fileName.ext";
    try (Socket socket = new Socket("localhost", port)) {
        File file = new File(path, fileName);

        OutputStream os = socket.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(os);
        try (DataOutputStream dos = new DataOutputStream(bos)) {                
            FileInputStream fis = new FileInputStream(file);
            try (BufferedInputStream bis = new BufferedInputStream(fis)) {
                dos.write(IOUtils.toByteArray(bis));
            }
        }
    }
    catch(Exception e) {
        e.printStackTrace();
    }
服务器端:

try {
    ServerSocket serverSocket = new ServerSocket(port);
    Socket socket = serverSocket.accept();
    File tempFile = new File(path, fileName);
    InputStream is = socket.getInputStream();
    BufferedInputStream bis = new BufferedInputStream(is);
    try (DataInputStream dis = new DataInputStream(bis)) {
        FileOutputStream fos = new FileOutputStream(tempFile);
        try (BufferedOutputStream bos = new BufferedOutputStream(fos)) {
            bos.write(IOUtils.toByteArray(dis));
        }
    }
}
catch(Exception e) {
    e.printStackTrace();
}

文件上传时大小是否正确?您也不需要在循环中调用flush,它只会使事情变得更慢。@Kayaman文件大小为same@Kayaman我的这个while循环没有终止。请帮助whilen=dis.readbuf!=-1{/**/}为什么上传文件后出现套接字关闭错误从客户端和服务器端代码中删除bos.flush和bos.close语句。仍然出现套接字关闭错误这行代码DataInputStream dis=new DataInputStreambis有什么用?我们不使用dis来删除任何东西,或者在删除那行代码之后再删除!!