2011-01-22 10 views
0

私はx11vncを使用していますので、簡単なクライアントを開発したいと思います。 だから、仕事は次のとおりです。java.netソケット、readline、行終端子(VNC接続)

  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"がない場合、またはソケットバッファが空の場合はどうすればソケットから読み込むことができますか?

答えて

2

改行で終了する唯一のRFB/VNCメッセージは、初期バージョン交換です。実際、RFB/VNCプロトコルは、独自のメッセージフレーミングを持たない点で幾分不備があります。すべてのメッセージを処理する必要があります。そうしないと、あなたは自分の場所を失います。ソケットまたはInputStreamReaderから直接読み込む必要があります。 LineNumberReaderでそれを折り返すことはできません。

私はRFB/VNCプロトコルに発見した最高の参照:http://tigervnc.org/cgi-bin/rfbproto

+0

うん、ありがとう、ので、どのように私はInputStreamReaderのから読み取ることができますか?私はどういう意味ですか? LineNumberReaderはいつ使用できますか?私はJavaに慣れていないので、このような«同一の»クラス(ISRとLNRではなく、BufferReaderなど)をいつ使用するのか理解できません。 – purple

+0

>うん、ありがとう、どうして私はInputStreamReaderから読み込むことができますか? *またソケットから直接? – purple

+0

@purple、read()メソッド。 [InputStreamReaderのリファレンス](http://download.oracle.com/javase/1.4.2/docs/api/java/io/InputStreamReader.html)を参照してください。また、[LineNumberReaderリファレンス](http://download.oracle.com/javase/1.5.0/docs/api/java/io/LineNumberReader.html)を参照してください。 – kanaka