java socket Inputstream,PrintWriter不起作用

时间:2018-12-04 04:47:16

标签: java sockets server client

我试图使服务器和客户端相互发送简单消息,但是效果不佳。

当我调试每端时,从服务器向客户端发送消息后,客户端在PrintWriter中放入“ hi”,然后客户端完成,但是服务器无法读取“ 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

1 个答案:

答案 0 :(得分:1)

您的服务器期望结尾处带有换行符的字符串,因此您需要替换 pw.print(hi);与您的客户pw.println(hi);