1

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

基本的に、私は次のようなものが欲しいです:

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

Cにはスリープメソッドがありますが、Javaでそれを行う方法がわかりません。誰にも提案はありますか?

4

3 に答える 3

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);
于 2012-02-06T04:41:38.333 に答える
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
    }
}
于 2012-02-06T04:43:19.433 に答える
0

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

だから、あなたはTimerクラスを使うことができます。

主な機能になると、次のようなものになります

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); 

そのクラスで TimerTask を実装します。

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

于 2012-02-06T05:46:27.610 に答える