刚学习Java的网络编程,为什么在客户端和服务端之间发送信息的时候却出现了乱码?

我的程序:服务端要接受客服端发来的文字,然后服务端在某个盘下面找改文字对应的文件(wav)文件,如果找到了就发信息给客服端文件名,如果没有找,就返回一个默认的文件名
异常:由服务端发送过去的文字到客服端却多处乱码

img

img

这里是客户端

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket(InetAddress.getByName("192.168.238.97"),8888);
        String destPath;
        System.out.println("你的要接受的文件名:");
        String str=new Scanner(System.in).next();
        //创建一个输出流
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bufferedWriter.write(str);
        bufferedWriter.newLine();
        bufferedWriter.flush();
        socket.shutdownOutput();

        //接受服务端发来的信息操作,用于修改文件名字;
        destPath=ReceiveMassage(socket);
        System.out.println("path="+destPath);}
      public static String ReceiveMassage(Socket socket) throws IOException {
        //新建一个接受类
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String s=br.readLine();
        return s;
    }
}

这里是服务端

public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket sockets=new ServerSocket(8888);
        String pathString="D:\\";
        String originPath="D:\\默认.wav";
        System.out.println("服务端已建立,正在等待接收文件名");
        Socket socket= sockets.accept();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //收取数据
        String s=bufferedReader.readLine();
        System.out.println("文件名为:"+s);
        //看是否能知道目标文件,如果在则发信息是目标文件的名称,如果不是则就返回默认文件名称
        File fileDest=FindFile(pathString,s);
        SendMassage(fileDest,socket, s);
      //向客户端回复信息,如果能找得到,那就恢复原文件名,如果找不到,那就恢复默认文件名
    public static void SendMassage(File file,Socket socket,String s) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        String s1;
        if(file!=null){
            s1=s+".wav";
            bw.write(s1);
        }else{
            s1="默认.wav";
            bw.write(s1);
        }
        bw.flush();

    }
    //该方法是寻找是否有这个文件,如果有则返回该文件,如果没有,则返回空
    public static File FindFile(String PathString,String s){
        File file=new File(PathString);
        File[] files=file.listFiles();
        s=s+".wav";
        System.out.println(s);
        for(File fileItem:files){
            String s1=fileItem.getName();
            System.out.println(s1);
            if(s1.equals(s)){
                return fileItem;
            }
        }
        return null;
    }

编码格式统一一下看看

img

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));

new InputStreamReader有个构造方法可以指定编码格式的,设置utf8就可以了