正在努力学习的小白袁 2023-04-12 22:17 采纳率: 90%
浏览 35
已结题

刚学习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;
    }
  • 写回答

2条回答 默认 最新

  • 心寒丶 全栈领域优质创作者 2023-04-13 10:27
    关注

    编码格式统一一下看看

    img

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月22日
  • 已采纳回答 7月14日
  • 修改了问题 4月13日
  • 修改了问题 4月13日
  • 展开全部

悬赏问题

  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 python的EOFError该怎么解决?
  • ¥15 Fluent,液体进入旋转区域体积分数不连续
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包
  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 layui数据重载无效
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程