他的固执,我的幼稚 2022-12-22 20:32 采纳率: 60%
浏览 22

关于#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

求解,感谢

  • 写回答

1条回答 默认 最新

  • wypdao 2022-12-23 01:06
    关注

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

        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();
        }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月22日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大