服务器端提供报时服务:当客户端发送出“几点了?”,服务器端向客户端返回“15:40”;若客户端发送“今天是几号?”,服务器端向客户端返回“5月22日”;若客户端发送“今天是星期几?”,服务器端向客户端返回“星期一”;客户端收到数据后将在命令行窗口中显示收到的时间信息;当客户端发送“再见”时,则服务器端结束对该客户端的服务;服务器端可以同时与多个客户端建立连接,并为它们提供报时服务。
时间: 2023-09-07 14:12:07 浏览: 113
服务器端与客户端进行通信
3星 · 编辑精心推荐
好的,以下是一个简单的 Java 套接字程序,实现了服务器端提供报时服务和客户端的交互:
服务器端:
```java
import java.io.*;
import java.net.*;
public class TimeServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户端 " + socket.getInetAddress().getHostAddress() + " 已连接");
Thread thread = new TimeThread(socket);
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class TimeThread extends Thread {
private Socket socket;
public TimeThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
InputStream inStream = socket.getInputStream();
OutputStream outStream = socket.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
PrintWriter writer = new PrintWriter(outStream, true);
String line;
while ((line = reader.readLine()) != null) {
System.out.println("客户端 " + socket.getInetAddress().getHostAddress() + " 发送消息:" + line);
String response = "";
switch (line) {
case "几点了?":
response = getTime();
break;
case "今天是几号?":
response = getDate();
break;
case "今天是星期几?":
response = getWeekday();
break;
case "再见":
response = "再见";
break;
default:
response = "无法识别的命令";
}
writer.println(response);
if (response.equals("再见")) {
break;
}
}
socket.close();
System.out.println("客户端 " + socket.getInetAddress().getHostAddress() + " 已断开连接");
} catch (IOException e) {
e.printStackTrace();
}
}
private String getTime() {
return new java.text.SimpleDateFormat("HH:mm").format(new java.util.Date());
}
private String getDate() {
return new java.text.SimpleDateFormat("M月d日").format(new java.util.Date());
}
private String getWeekday() {
return new java.text.SimpleDateFormat("EEEE").format(new java.util.Date());
}
}
```
该程序使用 ServerSocket 监听 8888 端口,等待客户端的连接请求。一旦有客户端连接,就启动一个新的线程(TimeThread),处理该客户端的请求。在线程中,通过输入流读取客户端发送的消息,并根据不同的命令返回不同的响应。如果客户端发送的是“再见”,则关闭套接字,结束对该客户端的服务。
客户端:
```java
import java.io.*;
import java.net.*;
public class TimeClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader inStream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter outStream = new PrintWriter(socket.getOutputStream(), true);
String line;
while ((line = reader.readLine()) != null) {
outStream.println(line);
String response = inStream.readLine();
System.out.println("收到服务器响应:" + response);
if (response.equals("再见")) {
break;
}
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
该程序使用 Socket 连接到本地的 8888 端口,通过标准输入读取用户输入的命令,并将其发送给服务器。然后从输入流中读取服务器的响应,并输出到标准输出中。如果服务器的响应是“再见”,则关闭套接字,结束程序。
阅读全文