【问题标题】:Client/Server Program in Java - StreamsJava 中的客户端/服务器程序 - 流
【发布时间】:2015-08-13 11:34:25
【问题描述】:

我无法从我为创建服务器/客户端程序而实现的代码中获取我想要的输出...这只是一个非常简单的输出,我不知道为什么我不这样做得到我想要的。

这是服务器的代码:

ServerSocket serverSocket = new ServerSocket(1025);
        System.out.println("Porting...");
        Socket socket = serverSocket.accept();

        PrintWriter out = new PrintWriter(socket.getOutputStream());
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        String s = in.readLine();
        System.out.println("Server read: " + s);
        out.write("Got it");

        socket.close();
        System.out.println("Server Exit");

客户:

    System.out.print("Connecting...");
        Socket socket = new Socket("localhost",1025);

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream());

        out.write("Hello, Server");

        String s = in.readLine();
        System.out.println("Client Recieved: " + s);

        socket.close();
        System.out.println("Client Exit");

我尝试获取 Hello, Server 输出,而我只是从客户端获取“正在连接”的 syso(我只是为了查看它是否有效)

【问题讨论】:

    标签: java networking stream client server


    【解决方案1】:

    一旦你在流上写入,你必须通过在输出流上调用 flush() 方法来刷新流。否则,一旦流缓冲区已满,流将被刷新。

     out.flush();
    

    您还必须确保输入换行符以提及行尾。因为 readLine() 等待带有 newline() 的字符串。

    A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r')
    
    
    
      out.write("Hello, Server\n");
                out.flush(); 
    

    【讨论】:

    • 非常感谢,Shriram!
    猜你喜欢
    • 2019-12-24
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多