0

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

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

等等。

因此,例如,我正在使用下一个简单的代码:

LineNumberReader lnr = new LineNumberReader(new InputStreamReader(socket.getInputStream()));
String test = null;

    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);

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

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

4

1 回答 1

2

唯一由换行符终止的 RFB/VNC 消息是初始版本交换。事实上,RFB/VNC 协议的不足之处在于它没有任何独特的消息帧。您必须处理每条消息,否则您将失去位置。您可能需要直接从套接字或 InputStreamReader 读取。用 LineNumberReader 包裹它是行不通的。

我在 RFB/VNC 协议上找到的最佳参考:http: //tigervnc.org/cgi-bin/rfbproto

于 2011-01-23T00:26:20.323 回答