java socket Inputstream, PrintWriter 不工作

java socket Inputstream, PrintWriter doesn't work

我试图制作一个服务器和客户端来相互发送简单的消息,但效果不佳。

当我调试每一方时,从服务器向客户端发送消息后,客户端将"hi "放入PrintWriter,然后客户端完成,但服务器无法读取"hi ",尽管我使用了 readline()。为什么服务器无法读取 "hi "?

public class Server1 {
    static ServerSocket ss;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            ss=new ServerSocket(4432);
            while(true)
            {
                Socket s=ss.accept();
                System.out.println("accept for client");
                function f=new function(s,ss);
                f.run();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

class function extends Thread{
    Socket s;
    ServerSocket ss;
    function(Socket s,ServerSocket ss)
    {
        this.s=s;
        this.ss=ss;
    }
    @Override
    public void run() {
        try {   

                PrintWriter pw=new PrintWriter(s.getOutputStream());
                InputStreamReader SR=new InputStreamReader(s.getInputStream());//client가 server로부터 메세지 읽어올 stream 추가
                BufferedReader reader=new BufferedReader(SR);

                pw.println("hello im server");
                pw.flush();

                String MFC=reader.readLine();
                String bb=MFC+" correct!";
                System.out.println(bb);

                pw.close();


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

上面的代码是服务器端的

public class Client1 {
    PrintWriter pw;
    InputStreamReader cr;
    static Socket s;
    public static void main(String[] args) {

    // TODO Auto-generated method stub
    Client1 c=new Client1();
    c.sck();
    }
    public void sck() {
    try {

        s=new Socket("127.0.0.1",4432);

        cr=new InputStreamReader(s.getInputStream());
        pw=new PrintWriter(s.getOutputStream());
        BufferedReader bf=new BufferedReader(cr);


        String get=bf.readLine();
        System.out.println(get);

        String hi="hi ";
        pw.print(hi);
        pw.flush();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

以上代码为客户端

我想要的结果是

[server]
accept for client
hi correct!   ->this is not working

[Client]
hello im server

您的服务器需要一个以换行符结尾的字符串,因此您需要替换 pw.print(hi); 在您的客户端中 pw.println(hi);