描述: 编写一个简单的聊天程序,客户端可以向服务器发送多条消息,服务器可以接收所有消息并回复。
代码示例:
服务器端 (Server.java):
import java.io.*;
import java.net.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {
public static void main(String[] args) throws IOException {
// 创建 ServerSocket 对象,监听指定端口
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("服务器启动,监听端口 8080");
// 创建线程池,处理多个客户端连接
ExecutorService executor = Executors.newFixedThreadPool(10);
while (true) {
// 阻塞等待客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());
// 创建线程处理客户端连接
executor.execute(new ClientHandler(socket));
}
}
// 处理客户端连接的线程类
static class ClientHandler implements Runnable {
private Socket socket;
public ClientHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
String message;
while ((message = in.readLine()) != null) {
System.out.println("收到客户端消息: " + message);
out.println("服务器回复: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端 (Client.java):
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
// 创建 Socket 对象,连接服务器
Socket socket = new Socket("127.0.0.1", 8080);
// 获取输入流和输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 发送多条消息
for (int i = 1; i <= 5; i++) {
out.println("客户端消息 " + i);
System.out.println("发送消息: " + "客户端消息 " + i);
// 接收服务器回复
String response = in.readLine();
System.out.println("接收回复: " + response);
}
// 关闭连接
socket.close();
}
}
运行步骤:
描述: 编写一个程序,服务器接收客户端发送的字符串,并将其反转后回复给客户端。
代码示例:
服务器端 (Server.java):
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
// 创建 ServerSocket 对象,监听指定端口
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("服务器启动,监听端口 8080");
while (true) {
// 阻塞等待客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());
// 获取输入流和输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 接收客户端发送的消息
String message = in.readLine();
System.out.println("收到客户端消息: " + message);
// 反转消息
String reversedMessage = new StringBuilder(message).reverse().toString();
// 将反转后的消息发送回客户端
out.println(reversedMessage);
System.out.println("发送回复: " + reversedMessage);
// 关闭连接
socket.close();
}
}
}
客户端 (Client.java):
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
// 创建 Socket 对象,连接服务器
Socket socket = new Socket("127.0.0.1", 8080);
// 获取输入流和输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 发送消息
out.println("hello world");
System.out.println("发送消息: hello world");
// 接收服务器回复
String response = in.readLine();
System.out.println("接收回复: " + response);
// 关闭连接
socket.close();
}
}
运行步骤:
描述: 编写一个程序,客户端上传文件到服务器,服务器保存文件到指定目录。
代码示例:
服务器端 (Server.java):
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
// 创建 ServerSocket 对象,监听指定端口
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("服务器启动,监听端口 8080");
while (true) {
// 阻塞等待客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());
// 获取输入流和输出流
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
// 接收文件名
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String fileName = reader.readLine();
System.out.println("接收文件名: " + fileName);
// 创建文件输出流
File file = new File("upload/" + fileName); // 文件保存到 upload 目录
FileOutputStream fileOutputStream = new FileOutputStream(file);
// 接收文件内容
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
// 发送成功信息
out.write("文件上传成功".getBytes());
System.out.println("文件上传成功: " + fileName);
// 关闭流和连接
fileOutputStream.close();
in.close();
out.close();
socket.close();
}
}
}
客户端 (Client.java):
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
// 创建 Socket 对象,连接服务器
Socket socket = new Socket("127.0.0.1", 8080);
// 获取输入流和输出流
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
// 上传文件
File file = new File("test.txt"); // 上传 test.txt 文件
String fileName = file.getName();
// 发送文件名
PrintWriter writer = new PrintWriter(out, true);
writer.println(fileName);
// 发送文件内容
FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
// 接收服务器回复
byte[] response = new byte[1024];
in.read(response);
System.out.println("服务器回复: " + new String(response));
// 关闭流和连接
fileInputStream.close();
in.close();
out.close();
socket.close();
}
}
运行步骤:
注意: