2012-02-06 10 views
1

JavaのDatagramSocketおよびDatagramPacketクラスを使用して、基本クライアントサーバーを作成しようとしています。基本的なコードを設定しましたが、クライアントからサーバーに100のメッセージを1秒間、2秒間、または5秒間隔で定期的に送信する方法が必要です。JavaおよびWebソケットのTimerTask

は基本的に、私が何かしたい:Cで

while (count != 0) 
sleep (1); 
create message packet; 
send message packet; 
count--; 

の睡眠方法がありますが、私はJavaでそれを行うするかどうかはわかりません。誰でも何か提案がありますか?

答えて

2

いつでもThread.sleep()を呼び出すことができます。これはCのsleep関数とほぼ同じですが、プログラムを完成させるための代替ルートをお勧めします。それはあなたが定期的に実行されるコードの一部をスケジュールすることができ、ScheduledThreadPoolExecutorクラスを見てみましょう:ここ

Runnable myCommand = new Runnable() { 
    public void run() { 
     // Do some work 
    } 
}; 

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(4); 
// Execute the command every second = 1000 milliseconds 
executor.scheduleAtFixedRate(myCommand, 0, 1000, TimeUnits.MILLISECONDS); 
1
Timer timer = new Timer(); 
timer.schedule(new Task(), 1000); //schedule the task to be run at 1 second (1000 mili sec) time 

は、Taskクラスのコード

class Task extends TimerTask 
{ 
    Task() 
    { 
    } 

    public void run() 
    { 
     //create datagram socket 
     //create datagram packet 
     //send the packet 
    } 
} 
0

JavaはですC言語よりかなり高いレベルです(もちろん、C言語のスレッドライブラリもあります)。これは、ライブラリよりJava言語サポートとしてサポートされていることを意味します)

したがって、Timerクラス。あなたはTimerTaskをを実装し、そのクラスでは

DatagramSocket socket = new DatagramSocket(); 
byte[] buf = new byte[256]; 
InetAddress address = InetAddress.getByName("sample-address"); 
DatagramPacket packet = new DatagramPacket 
        (buf, buf.length, 
        address, 4445); 
socket.send(packet); 

のようなものを持っています主な機能に来

実行メソッドをオーバーライドする必要があります。

関連する問題