сокеты java.net, readline и ограничители строки (соединение VNC) - PullRequest
0 голосов
/ 23 января 2011

Я использую x11vnc и хочу разработать для него простой клиент. Итак, работа такая:

  1. получить информацию из сокета
  2. отправить информацию
  3. получить следующие данные
  4. отправить другую информацию

и т. Д.

Так, например, я использую следующий простой код: <pre> LineNumberReader lnr = new LineNumberReader(new InputStreamReader(socket.getInputStream())); String test = null;</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);

Первое сообщение с сервера я получил без ошибок (сначала readLine). Следующее сообщение пустое (или без какого-либо конца строки для readLine), и у меня бесконечный цикл. lnr.ready () не работает для меня.

Итак, как я могу читать из сокета, когда данные из сокета иногда не имеют "\ n", "\ r", "\ r \ n" или если буфер сокета пуст?

1 Ответ

2 голосов
/ 23 января 2011

Единственное сообщение RFB / VNC, оканчивающееся переводом строки, - это обмен исходной версией. На самом деле протокол RFB / VNC несколько несовершенен в том смысле, что в нем нет уникальных кадров сообщений; вам придется обрабатывать каждое сообщение, иначе вы потеряете свое место. Вам, вероятно, нужно будет читать напрямую из сокета или из InputStreamReader. Упаковка с LineNumberReader не будет работать.

Лучшая ссылка, которую я нашел по протоколу RFB / VNC: http://tigervnc.org/cgi-bin/rfbproto

...