使用Java语言利用socket做一个前后端响应的倒计时功能
时间: 2024-05-15 12:16:56 浏览: 20
前端代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>倒计时</title>
</head>
<body>
<h1>倒计时</h1>
<h2 id="countdown"></h2>
<script>
const socket = new WebSocket("ws://localhost:8080");
socket.onmessage = function(event) {
document.getElementById("countdown").innerHTML = event.data;
};
</script>
</body>
</html>
```
前端页面中使用WebSocket与后端建立连接,接收后端发送的倒计时数据并更新页面。
后端代码:
```java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class CountdownServer {
private static final int PORT = 8080;
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
System.out.println("Server is listening on port " + PORT);
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
while (true) {
Socket socket = serverSocket.accept();
System.out.println("New client connected");
executorService.scheduleAtFixedRate(() -> {
try {
long remainingTime = getTimeRemaining();
if (remainingTime <= 0) {
socket.close();
executorService.shutdown();
}
socket.getOutputStream().write(String.valueOf(remainingTime).getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}, 0, 1, TimeUnit.SECONDS);
}
} catch (IOException e) {
System.err.println("Server error: " + e.getMessage());
}
}
private static long getTimeRemaining() {
long endTime = System.currentTimeMillis() + 10000; // 倒计时10秒
return endTime - System.currentTimeMillis();
}
}
```
后端建立ServerSocket监听端口,接受客户端连接。使用ScheduledExecutorService定时发送倒计时数据给客户端,直到倒计时结束后关闭连接和线程池。