java实现端口指定时间内定时开启 不在指定时间定时关闭
时间: 2023-08-04 08:03:23 浏览: 123
你可以使用Java中的`Timer`类和`ServerSocket`类来实现端口在指定时间内定时开启,并在不在指定时间内定时关闭的功能。下面是一个示例代码:
```java
import java.net.ServerSocket;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
public class PortTimer {
private static final int PORT = 8080;
private static final int START_HOUR = 9; // 开始时间的小时数
private static final int END_HOUR = 18; // 结束时间的小时数
private static final int CHECK_INTERVAL = 1000 * 60; // 检查时间间隔,单位为毫秒
private ServerSocket serverSocket;
private Timer timer;
public PortTimer() {
try {
serverSocket = new ServerSocket(PORT);
System.out.println("端口" + PORT + "已开启");
} catch (Exception e) {
System.err.println("端口" + PORT + "开启失败: " + e.getMessage());
return;
}
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
if (hour >= START_HOUR && hour < END_HOUR) {
if (serverSocket.isClosed()) {
try {
serverSocket = new ServerSocket(PORT);
System.out.println("端口" + PORT + "已开启");
} catch (Exception e) {
System.err.println("端口" + PORT + "开启失败: " + e.getMessage());
}
}
} else {
if (!serverSocket.isClosed()) {
try {
serverSocket.close();
System.out.println("端口" + PORT + "已关闭");
} catch (Exception e) {
System.err.println("端口" + PORT + "关闭失败: " + e.getMessage());
}
}
}
}
}, 0, CHECK_INTERVAL);
}
public static void main(String[] args) {
PortTimer portTimer = new PortTimer();
}
}
```
在上面的示例代码中,我们使用了`ServerSocket`类来开启指定的端口,并使用`Timer`类来实现定时检查当前时间,并根据当前时间开启或关闭端口。在构造函数中,我们首先尝试开启端口。然后创建了一个`Timer`对象,并使用`schedule()`方法来安排定时任务。在定时任务中,我们首先获取当前时间的小时数,并判断是否在指定时间范围内。如果在指定时间范围内,并且端口已关闭,我们就再次开启端口。如果不在指定时间范围内,并且端口未关闭,我们就关闭端口。最后,我们设置了定时检查的时间间隔。
当定时任务运行时,它会根据当前时间来开启或关闭端口。您可以根据需要调整`PORT`、`START_HOUR`和`END_HOUR`常量的值来更改端口号和指定时间范围。
阅读全文