java - 在java中等待客户端响应的正确方法是什么?

标签 java sockets serversocket server-push

首先,如果您帮助我解决了读取未定义长度的 HTTP 响应的问题,我要感谢您。我采纳了您的建议,从 HTTP 响应切换到原始 Java 套接字。但我也遇到了一个小问题。

推送服务器的本质是在收到东西时将它们推送到客户端(在我的例子中,系统使用标有设备 ID 的文件。)问题是,对于 Java 教程中的 KnockKnock 示例,它们的代码:

while ((inputLine = in.readLine()) != null) {...   

在发送内容之前等待客户端发送内容。所以我决定使用:

while (true) {
    if ((inputLine=in.readLine())==null) inputLine="";
    ...

如果任何输入解释器得到这个空字符串,那么它们将不会执行任何操作。

我的问题本质上是哪个更好,如果是第一个,我如何继续检查文件以发送所需的内容而不产生线程?

最佳答案

第一个实现了为 KnockKnock 示例设想的协议(protocol):客户端发送“KnockKnock”,服务器应答。

第二个没有多大意义。如果客户端有一个与服务器打开的输出流,并且服务器调用 readLine(),则意味着它正在等待来自客户端的行。并且调用将阻塞,直到客户端发送一行或关闭套接字。

看来您并不期望客户端提供任何输入。在这种情况下,根本不要打开输入流,也不要在输入流上调用 readLine() (显然)。只要您想发送,就直接将您需要发送的内容发送给客户。

关于java - 在java中等待客户端响应的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072470/

相关文章:

java - 如何更改此代码,以便当您输入 localhost :9080/? say=hello 时,它输出 hello?

java - 如何使用自定义字体从 servlet 使用 iText+XMLWorker 创建 PDF?

c - 为客户端收到的消息出现段错误

java - 关闭 Input/OutputStream 和直接关闭 Socket 有什么区别?

java - 保持服务器和客户端之间的通信畅通 - Java

java - 我发送的TCP数据被分成不同的颗粒

java - 如何让Jetty动态加载 "static"页面

Java图形使用fillRect绘制一条线

java - 在java中设置相同的属性POJO

.net - 使用 TcpClient 和 Socket 伪造慢速连接