请使用Socket类、ServerSocket类等编写一个套接字程序。服务器端提供报时服务:当客户端发送出“几点了?”,服务器端向客户端返回“15:40”;若客户端发送“今天是几号?”,服务器端向客户端返回“5月22日”;若客户端发送“今天是星期几?”,服务器端向客户端返回“星期一”;客户端收到数据后将在命令行窗口中显示收到的时间信息;当客户端发送“再见”时,则服务器端结束对该客户端的服务;服务器端可以同时与多个客户端建立连接,并为它们提供报时服务。
时间: 2023-09-07 08:11:28 浏览: 83
大多数程序员所接触到的套接字(Socket)为两类:
好的,以下是使用 Socket 和 ServerSocket 编写的 Java 套接字报时程序:
Server 端代码:
```java
import java.net.*;
import java.io.*;
public class TimeServer {
public static void main(String[] args) {
try {
// 创建一个服务器套接字,监听 8888 端口
ServerSocket server = new ServerSocket(8888);
System.out.println("服务器正在监听 8888 端口...");
while (true) {
// 等待客户端连接
Socket client = server.accept();
System.out.println("客户端已连接:" + client.getInetAddress().getHostName());
// 处理客户端请求
handleClientRequest(client);
// 关闭连接
client.close();
}
} catch (IOException e) {
System.err.println("无法启动时间服务器:" + e.getMessage());
}
}
private static void handleClientRequest(Socket client) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
String request;
while ((request = in.readLine()) != null) {
System.out.println("收到客户端请求:" + request);
String response = "";
if (request.equals("几点了?")) {
response = getTime();
} else if (request.equals("今天是几号?")) {
response = getDate();
} else if (request.equals("今天是星期几?")) {
response = getDayOfWeek();
} else if (request.equals("再见")) {
break;
} else {
response = "不知道你在说什么...";
}
out.println(response);
System.out.println("向客户端发送响应:" + response);
}
System.out.println("客户端已断开连接。");
}
private static String getTime() {
return new java.text.SimpleDateFormat("HH:mm").format(new java.util.Date());
}
private static String getDate() {
return new java.text.SimpleDateFormat("M月d日").format(new java.util.Date());
}
private static String getDayOfWeek() {
return new java.text.SimpleDateFormat("EEEE").format(new java.util.Date());
}
}
```
Client 端代码:
```java
import java.net.*;
import java.io.*;
public class TimeClient {
public static void main(String[] args) {
try {
// 连接服务器
Socket server = new Socket("localhost", 8888);
// 发送请求到服务器
PrintWriter out = new PrintWriter(server.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String request, response;
while ((request = reader.readLine()) != null) {
out.println(request);
response = in.readLine();
System.out.println("收到服务器响应:" + response);
if (request.equals("再见")) {
break;
}
}
// 关闭连接
server.close();
} catch (IOException e) {
System.err.println("无法连接到服务器:" + e.getMessage());
}
}
}
```
运行 Server 端程序后,可以使用多个命令行窗口运行 Client 端程序,并测试多个客户端同时连接和交互的情况。
阅读全文