【问题标题】:Java PrintStream immediately to outputStream with Scanner and loopJava PrintStream 立即使用 Scanner 和循环输出到 outputStream
【发布时间】:2017-07-03 07:11:16
【问题描述】:

我正在尝试循环扫描仪来读取一行,通过 printStream 立即将其发送给应该打印它的客户端,然后等待来自服务器的另一行。

我的客户端在打印第一条消息后一直卡住,之后只返回 null。我想我不应该在 Server.java 中调用 printStream.close(),但是在我关闭它之前不会传输消息。 printSteam.flush 似乎什么也没做。

相关代码:

服务器.java

       ServerSocket serverSocket = new ServerSocket(1234);
       Socket connectionSocket = serverSocket.accept();
       OutputStream outputStream = connectionSocket.getOutputStream();

       Scanner sc = new Scanner(System.in);

        while(true) {

            System.out.print("Pass me a message: ");
            String input = sc.nextLine();

            final PrintStream printStream = new PrintStream(outputStream);
            printStream.print(input);
            printStream.flush();
            printStream.close();
        }

客户端.java

        Socket connectionSocket = new Socket("localhost", 1234);
        InputStream inputStream = connectionSocket.getInputStream();

        String result = "";
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(inputStream));

        while (true) {

            result = inFromServer.readLine();
            System.out.println("Message: "+result);
        }

感谢您的帮助!

【问题讨论】:

  • 什么是outputStream
  • 它是一个正常的 OutputSteam。我已经更新了 sn-p。

标签: java java.util.scanner bufferedreader outputstream


【解决方案1】:

关闭 PrintStream 后,它就完成了。如果它后面有一个套接字连接,它将关闭该连接。相反,在循环之外创建 PrintStream 并且不要关闭它

    final PrintStream printStream = new PrintStream(outputStream);
    while(true) {

        System.out.print("Pass me a message: ");
        String input = sc.nextLine();

        printStream.print(input);
        printStream.flush();
    }

【讨论】:

  • 谢谢,但我的客户现在不会打印任何消息。
  • @JoJota 太棒了!当您有时间时,请点击绿色复选标记表示这已经解决了您的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
相关资源
最近更新 更多