【问题标题】:Java Socket OutputStream is not flushingJava Socket OutputStream 未刷新
【发布时间】:2011-01-13 13:59:42
【问题描述】:

我正在用 java 编写一个基于套接字的服务器。客户端连接到它(网络浏览器),服务器发回一个简单的 html 代码并设置 cookie 以在客户端再次连接到它时识别。我正在使用 PrintStream 写入套接字,但刷新不起作用。我可以刷新的唯一方法是使用 shutdownoutput 或 close 并关闭套接字流。但我不希望这样,因为我在代码的几个地方多次读取/写入它。能做什么?无法从标签中获得任何帮助。 我还尝试了其他缓冲写入器类,同样的问题。

【问题讨论】:

  • 你能发布一个你的服务器代码的例子吗?
  • 这确实很旧,但对于后代来说,ps.flush() 是不必要的,因为在打印"\n" 时会发生刷新——即调用println()。此外,在SocketOutputStream 中,flush() 方法无论如何都是无操作的。

标签: java sockets flush printstream


【解决方案1】:

啊,是的,愚蠢的问题,你只需要使用 pstream.writeln("");因为 breader.readLine() 读取直到找到 '\n' 字符。 所以 write() 不起作用。

【讨论】:

    【解决方案2】:

    我会尝试调用此方法而不是刷新:

    public boolean checkError()
    Returns:
        True if and only if this stream has encountered an IOException other than InterruptedIOException, or the setError method has been invoked
    

    查看是否由于某种原因导致刷新失败(checkError 在内部调用刷新并记住错误状态)。

    另外值得一试的是使用 telnet 连接到服务器并查看数据是否立即返回,或者编写一个简单的 java 客户端套接字程序来检查(从网上剪切/粘贴一个)。

    可能是浏览器决定在显示您的 html 之前故意等待更多输入(特别是如果 html 格式不完美)。我似乎记得过去自己也遇到过这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2016-06-12
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      相关资源
      最近更新 更多