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

时间:2011-01-22 23:37:33

标签: java sockets readline vnc terminator

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

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

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

    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”或套接字缓冲区为空时,如何从套接字读取?

1 个答案:

答案 0 :(得分:2)

由换行符终止的唯一RFB / VNC消息是初始版本交换。事实上,RFB / VNC协议有点不足,因为它没有任何独特的消息帧;你必须处理每一条消息,否则你将失去你的位置。您可能需要直接从套接字或InputStreamReader中读取。用LineNumberReader包装它将无法正常工作。

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