我正在使用x11vnc,我想为它开发简单的客户端。 所以,工作是:
等等。
所以,例如,我正在使用下一个简单的代码:
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”或套接字缓冲区为空时,如何从套接字读取?
答案 0 :(得分:2)
由换行符终止的唯一RFB / VNC消息是初始版本交换。事实上,RFB / VNC协议有点不足,因为它没有任何独特的消息帧;你必须处理每一条消息,否则你将失去你的位置。您可能需要直接从套接字或InputStreamReader中读取。用LineNumberReader包装它将无法正常工作。
我在RFB / VNC协议上找到的最佳参考:http://tigervnc.org/cgi-bin/rfbproto