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 に答える