正在努力学习的小白袁 2023-06-26 11:34 采纳率: 90%
浏览 15
已结题

java网络编程在发送文件再字符串遇到不能正常运行

想着用java的网络编程,客户端先发送文件,服务端接收,客户端在发送一条语句,服务端已接受
但结果是文件没有完全接受(已保存,但是打不开),语句发出去却显示null
服务端代码



import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Test_Server {
    public static void main(String[] args) throws IOException {
        ServerSocket sockets=new ServerSocket(8899);
        Socket socket = sockets.accept();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\null2.jpg");
 
 
        int i=0;
        byte[] bytes=new byte[1024];
        while((i=bufferedInputStream.read(bytes))!=-1){
            fileOutputStream.write(bytes,0 ,i);
        }
        System.out.println("已接受文件");
 
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String s = bufferedReader.readLine();
        System.out.println(s);
 
//        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
//        bufferedOutputStream.write("copyRightNow".getBytes());
 
//        bufferedOutputStream.close();
        bufferedReader.close();
        fileOutputStream.close();
        bufferedInputStream.close();
 
    }
}
 

客户端代码


import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class Test_Client {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket(InetAddress.getLocalHost(),8899);
        OutputStream outputStream = socket.getOutputStream();
        BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);
//
//
        byte[] bytes=getBytes();
        bufferedOutputStream.write(bytes);
        System.out.println("已发送文件");
 
        //发送语句
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("helloWorld");
        bufferedWriter.newLine();
        bufferedWriter.flush();
        socket.shutdownOutput();
        System.out.println("已发送语句");
 
        bufferedWriter.close();
        socket.close();
 
    }
    //获取二进制文件保存在bytes数组中
    public static byte[] getBytes() throws IOException {
        File file = new File("D:\\null.jpg");
        FileInputStream fileInputStream = new FileInputStream(file);
        int len=(int)file.length();
        byte[] bytes=new byte[len];
        int readLine;
        while((readLine= fileInputStream.read(bytes))!=-1){}
        fileInputStream.close();
        return bytes;
 
    }
}


  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-26 14:48
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月11日
  • 已采纳回答 10月3日
  • 创建了问题 6月26日

悬赏问题

  • ¥15 verilog 非阻塞赋值下的移位拼接错误
  • ¥100 两个按钮控制一个LED
  • ¥15 用C语言写离散数学相关问题
  • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
  • ¥15 ansys机翼建模肋参数
  • ¥15 Sumo软件无法运行
  • ¥15 如何在vscode里搭建stata的编辑环境?
  • ¥15 dify知识库创建问题
  • ¥15 如何用C#的chart画1000万个点不卡顿
  • ¥15 爬虫技术找到网上看过房源客户的电话