1

TCP を使用してソケット経由で通信しようとしています。送信する必要があるデータは、描画中の描画です。そのため、すべてのポイントを送信するか、シェイプ (一連のポイント) のみを送信するかを選択できます。

すぐに引けるのがいいのでポイントを送った方が良さそうです。ローカルでのみ使用するため、大量のデータが問題になることはありません。今私が抱えている問題は、ソケットがどのように機能するかを正確に理解することです。現在、私のコードは次のとおりです。

    while(true){

        try {
            Thread.sleep(10);
         }
         catch (InterruptedException e) {}

        switch(connectionStatus){
        case CONNECTED:
            if(isHost){
                try {
                    oos.writeObject(myObject);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else{
                try {
                    myObject = (myObjectType) ois.readObject();
                    mainFrame.repaint();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            break;
      }
}

しかし、言うまでもなく、これは常に実行されているため、かなり効率が悪いようです。新しいデータがあるときにのみObjectOutputStream(oos) に書き込む方法はありますか? 私はあなたが投票しなければならないことを読むと思います。読み取りも ObjectOutputStream をクリアしますか?

編集

Point明確にするために:ソケットを介して複数のオブジェクトを送信したい。したがって、サーバーなどに a が追加されるたびに、Pointこのポイントをクライアントに送信する必要があります。

今、私は何を中に入れる必要がありoos.writeObject()ますか?単一のPoint、またはListPoint? そして、それらはどのように から取得されますois.readObject()か?

ObjectOutputStream への書き込みは高速または低速になる可能性があるため、少し混乱しています。ObjectInputStream を読み取ると、私が見るように、大きな遅延が発生するか、大きな遅延が発生するか (〜 15 ミリ秒ごとに値が読み取られ、ポイントがそれよりも速く追加される場合)、または多くの遅延が発生します。

4

3 に答える 3

1

新しいデータがあるときにのみObjectOutputStream( ) に書き込む方法はありますか?oos

はい。ユーザーが何かを描画するたびに、データをObjectInputStream.

私はあなたが投票しなければならないことを読むと思います。

それは正しくありません。通常、開いているストリームからの読み取りはブロック操作です。何かを読み取ろうとしてそこに何もない場合、readメソッドは新しいデータが利用可能になるまで単にブロックします。

于 2013-11-10T02:30:19.077 に答える
0
  1. 書き込みの場合は、データが利用可能な場合にのみ書き込むために、スレッド化と同期の手法を採用する必要があります。1 つのスレッドは新しいデータが利用可能になったことを通知し、別のスレッドは待機して通知を受け、データが到着したことが通知されると実行を継続します。
  2. 読み取りは ObjectOutputStream をクリアしません。実際、2 つのスレッドを使用して、入力ストリームと出力ストリームを同時に処理できます。
  3. オブジェクトの読み取りは同期操作です。つまり、スレッドはオブジェクトの準備が整うまで待機します。
于 2013-11-10T02:34:40.977 に答える