java利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。 客户端向服务器端发送请求给服务端,形式如“From 学号 姓名: what time is it ”;服务器端接受到该字符串后将服务器端当前时间返回给客户端,形式如“To 姓名: 当前时间”;客户端向服务器端发送“From 学号 姓名:Exit”命令,服务器端向客户端返回“To 姓名:Bye”后退出。
时间: 2024-03-05 19:47:48 浏览: 84
Java聊天室的设计与实现,毕业设计,毕业论文,项目辅导视频,源代码
以下是一个简单的 Java 代码示例,实现了一个简单的 C/S 程序,使用了 Socket 类和 ServerSocket 类进行通信:
服务器端代码:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Server {
public static void main(String[] args) {
int port = 8888;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected: " + clientSocket.getInetAddress().getHostAddress());
try (BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true)) {
String request;
while ((request = reader.readLine()) != null) {
if (request.startsWith("From")) {
String[] parts = request.split(" ");
String name = parts[2];
String response = "To " + name + ": " + getCurrentTime();
writer.println(response);
} else if (request.startsWith("Exit")) {
String[] parts = request.split(" ");
String name = parts[2];
String response = "To " + name + ": Bye";
writer.println(response);
break;
}
}
clientSocket.close();
System.out.println("Client disconnected: " + clientSocket.getInetAddress().getHostAddress());
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static String getCurrentTime() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
return formatter.format(date);
}
}
```
在上面的代码中,我们首先创建一个 ServerSocket 对象,它监听指定的端口号。然后,我们使用一个 while 循环不断接受客户端的连接请求,并使用 try-with-resources 语句创建一个 Socket 对象,用于与客户端进行通信。在通信过程中,我们使用 BufferedReader 对象读取客户端发送的请求,并根据请求内容进行相应的响应。如果客户端发送了 "From ... : Exit" 命令,则服务器端向客户端发送 "To ... : Bye" 命令,并退出循环,关闭 Socket 对象,等待下一个客户端连接。
客户端代码:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
String host = "localhost";
int port = 8888;
try (Socket socket = new Socket(host, port);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
Scanner scanner = new Scanner(System.in)) {
System.out.println("Connected to server on " + host + ":" + port);
while (true) {
System.out.print("Enter command: ");
String command = scanner.nextLine();
writer.println(command);
String response = reader.readLine();
System.out.println(response);
if (response.endsWith("Bye")) {
break;
}
}
System.out.println("Disconnected from server");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在上面的代码中,我们首先创建一个 Socket 对象,它连接到指定的服务器地址和端口号。然后,我们使用一个 while 循环不断读取用户输入的命令,并将命令发送给服务器端。同时,我们使用 BufferedReader 对象读取服务器端返回的响应,并将响应输出到控制台。如果服务器端返回的响应以 "Bye" 结尾,则客户端退出循环,关闭 Socket 对象,结束程序。
阅读全文