TimerTask в Java и веб-сокет - PullRequest
       6

TimerTask в Java и веб-сокет

1 голос
/ 06 февраля 2012

Я пытаюсь написать базовый клиентский сервер, используя классы Java DatagramSocket и DatagramPacket. У меня настроен базовый код, но я хочу, чтобы с моего Клиента на сервер регулярно отправлялось 100 сообщений, т. Е. 1 секунда, 2 секунды или 5 секунд.

В принципе, я хочу что-то вроде:

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

В Си есть метод сна, но я не уверен, как это сделать в Java. У кого-нибудь есть предложения?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

Вы всегда можете вызвать Thread.sleep(), что в значительной степени эквивалентно функции sleep из C. Но я бы порекомендовал альтернативный способ выполнения вашей программы. Взгляните на класс 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 голос
/ 06 февраля 2012
Timer timer = new Timer();
timer.schedule(new Task(), 1000); //schedule the task to be run at 1 second (1000 mili sec) time

Вот код для класса задач

class Task extends TimerTask
{
    Task()
    {
    }

    public void run()
    {
        //create datagram socket
        //create datagram packet
        //send the packet
    }
}
0 голосов
/ 06 февраля 2012

Java на довольно высоком уровне, чем C. (конечно, у вас есть библиотеки потоков в C тоже :), я имел в виду, что это поддерживается как поддержка языка Java, чем библиотеки)

Итак, вы можете использовать Timer class.

При переходе к основному функционалу у вас будет что-то вроде

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.

Необходимо переопределить метод run там.*

...