关于#java#的问题:接收端能返回数据,但是接收端下载的文件内没有内容

用tcp上传文件,接收端下载写入后,返回数据

img

接收端能返回数据,但是接收端下载的文件内没有内容
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 10000);
        //本地流,用来读取本地文件
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\Test\\code\\1.txt"));
        //写到服务器,---网络流
        OutputStream os = socket.getOutputStream();
        BufferedOutputStream bos=new BufferedOutputStream(os);//用bos包装一下,提高效率

        int b;
        while ((b=bis.read())!=-1){
                bos.write(b);//通过网络写到服务器
        }
        socket.shutdownOutput();//给服务器一个结束标记,表面文件传输完成

        //接受返回数据
        BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        while ((line=br.readLine())!=null){
            System.out.println(line);
        }
        socket.close();
        bis.close();
    }
}


    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(10000);
        Socket accept = ss.accept();

        BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());//从网络获取
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\Test\\code\\2.txt"));//写到本地流

        int b;
        while ((b = bis.read()) != -1) {
            bos.write(b);
        }
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));
        bw.write("上传成功");
        bw.newLine();
        bw.flush();
        bos.close();

        accept.close();
        ss.close();

    }
}


server能穿件文件,但是文件内没有内容
代码中我用的txt文件做的案例,用jpg的话能下载下来,但是idea提示需要外部打开
外部打开后能看见下载下来的内容

img

求解,感谢

应该是跟你的客户端发送数据的方式有关系,稍微改造一下就能通了

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 10011);
        //本地流,用来读取本地文件
        BufferedReader bis = new BufferedReader(new FileReader("E:\\tmp\\1.txt"));
        //写到服务器,---网络流
        OutputStream os = socket.getOutputStream();
        //BufferedOutputStream bos=new BufferedOutputStream(os);//用bos包装一下,提高效率
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(os));
        /*int b;
        while ((b=bis.read())!=-1){
            bos.write(b);//通过网络写到服务器
        }*/
        String str = bis.readLine();
        bufferedWriter.write(str);
        bufferedWriter.flush();
        socket.shutdownOutput();//给服务器一个结束标记,表面文件传输完成

        //接受返回数据
        BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        while ((line=br.readLine())!=null){
            System.out.println(line);
        }
        socket.close();
        bis.close();
    }