1

我正在尝试使用 JavaDatagramSocketDatagramPacket类编写一个基本的客户端服务器。我已经设置了基本代码,但我想要一种方法来定期从我的客户端向我的服务器发送 100 条消息,即 1 秒、2 秒或 5 秒。

基本上,我想要类似的东西:

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

在 C 中有一个 sleep 方法,但我不知道如何在 java 中做到这一点。有人有什么建议吗?

4

3 回答 3

2

您可以随时调用Thread.sleep(),这在很大程度上等同于sleepC 中的函数。但我会推荐另一种方法来完成您的程序。看一下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 回答