2016-06-18 15 views
0

同じネットワークに接続されたコンピュータから情報を送受信するコードを書いています。私は正確な瞬間にオンラインコンピュータのIPを取得する方法がありますが、新しいIPが表示されたり消えたりするとリストを更新する必要があります。Javaで接続されたIPアドレスのリストを自動的にリフレッシュ

私はスレッドを持っているとは思わないし、while (true)メソッドを呼び出すのが最適な解決策です。私は他の何も考えていない - 何か提案?ここで

は、私がネットワーク上でアクティブなコンピュータを検索するために使用するコードのサンプルです:

public List<String> searchApps() { 
    List<AddressServiceTypePair> ip = this.networkController.getDiscovered(); //returns an ArrayList<AddressServiceTypePair> 

    onlineApps.clear(); 
    for (AddressServiceTypePair service : ip) { 
     onlineApps.add(service); 
    } 

    List<String> list = new ArrayList<>(); 
    for (AddressServiceTypePair aux : onlineApps) { 
     list.add(aux.getIP()); 
    } 
    return list; 
} 
+0

自分自身をポーリングすることも、リスナーをどこかに追加することもできます。 – Jeroen

答えて

1

掲載不明確コードサンプルに基づいて一般化することは困難です。しかし、私はあなたが何らかのタイプのクライアントとサーバーコードを書いていると仮定しています。ネットワーク上の追加/削除されたコンピュータの通知を受ける簡単な方法はありません。あなたが最新のの瞬間 IPのリストを必要としたら私は驚くでしょう。 IPを発見する方法を無限ループに入れて、単にループにThread.sleep(milliseconds);を含めることができます。

本当に最新の情報が必要な場合は、接続されている各コンピュータを別のスレッドの別のポートのソケットに接続してからソケットから読み取ろうとすると、例外が発生しますソケットが閉じるとすぐに。 Socketの作成時にクライアントのIPを追加すると、Socketが閉じるときにcatchブロックがアクティブIPのリストを更新し、クライアントが接続されなくなったことを知らせます。

+0

私はあなたが正しいと思います!私はちょうどThread.sleep(1000)のループでip disconveringを入れます。(1000ではないかもしれません).... 1秒で十分です。私はちょうどパフォーマンスに注意を払う必要があります – Joseph

+0

私はjlistのIPのリストを置く必要がある場合もう一つの事私はスレッドと同じ時間スリープで別のスレッドを作成する必要がありますjlistで表示するIPを検索する〜のために? – Joseph

+0

私は単純に同じwhileループの一部としてJListを更新します。 –

関連する問題