java.net 套接字、readline 和行终止符(VNC 连接)

标签 java sockets readline vnc terminator

我正在使用x11vnc,我想为其开发简单的客户端。 所以,工作是:

  1. 从套接字接收信息
  2. 发送信息
  3. 接收下一个数据
  4. 发送其他信息

等等

例如,我正在使用下面的简单代码:

LineNumberReader lnr = new LineNumberReader(new InputStreamReader(socket.getInputStream()));
String test = null;<p></p>

<pre><code>    try {
        test = lnr.readLine();
        System.out.println(test);
        test = lnr.readLine();
        System.out.println(test);
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.exit(0);
</code></pre>

<p></p>
我收到的来自服务器的第一条消息没有错误(第一条 readLine)。下一条消息是空的(或者没有任何 readLine 的行终止符)并且我有无限循环。 lnr.ready() 不适合我。

那么,当来自套接字的数据有时没有“\n”、“\r”、“\r\n”或者套接字缓冲区为空时,如何从套接字读取数据?

最佳答案

唯一以换行符终止的 RFB/VNC 消息是初始版本交换。事实上,RFB/VNC 协议(protocol)有些缺陷,因为它没有任何独特的消息帧;你必须处理每条消息,否则你将失去你的位置。您可能需要直接从套接字或 InputStreamReader 读取。用 LineNumberReader 包装它是行不通的。

我在 RFB/VNC 协议(protocol)上找到的最佳引用:http://tigervnc.org/cgi-bin/rfbproto

关于java.net 套接字、readline 和行终止符(VNC 连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771358/

相关文章:

java - 搜索对象数组列表的特定属性

java - 无法接收 ACTION_PASSWORD_SUCCEEDED 和 ACTION_PASSWORD_FAILED Intent

java - 在Java中从UDP数据包中读取位

c++ - boost asio - 编写等效的代码

ruby - IRB 历史不适用于 Ruby 2.3.0

javascript - 如何将此 Python 代码转换为 Node.js

java - 是否有 Db2 标量函数来检索给定 SQLCODE 的完整错误消息信息?

java - WebSphere 和 Axis 1.4 - NoClassDefFoundError

matlab - MATLAB 中的套接字编程?

java - 如何在Android应用程序中从txt文件中获取部分行