【VSCode】使用VSCode创建Java C/S架构项目
使用VSCode创建Java C/S架构项目
在VSCode中创建Java客户端/服务器(C/S)架构项目需要一些配置步骤。下面我将指导您完成整个过程。
环境准备
- 安装VSCode
- 安装Java扩展包(Extension Pack for Java)
- 安装JDK(建议JDK 11或更高版本)
创建项目结构
1. 创建项目文件夹结构
java-cs-project/
├── client/
│ ├── src/
│ │ └── Client.java
│ └── bin/
├── server/
│ ├── src/
│ │ └── Server.java
│ └── bin/
└── shared/├── src/│ └── Message.java└── bin/
2. 创建共享消息类
首先创建shared/src/Message.java
:
import java.io.Serializable;public class Message implements Serializable {private String sender;private String content;private long timestamp;public Message(String sender, String content) {this.sender = sender;this.content = content;this.timestamp = System.currentTimeMillis();}// Getters and setterspublic String getSender() { return sender; }public void setSender(String sender) { this.sender = sender; }public String getContent() { return content; }public void setContent(String content) { this.content = content; }public long getTimestamp() { return timestamp; }@Overridepublic String toString() {return "[" + new java.util.Date(timestamp) + "] " + sender + ": " + content;}
}
3. 创建服务器端
创建server/src/Server.java
:
import java.io.*;
import java.net.*;
import java.util.concurrent.*;public class Server {private static final int PORT = 12345;private static ExecutorService pool = Executors.newFixedThreadPool(10);public static void main(String[] args) {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());ClientHandler clientThread = new ClientHandler(clientSocket);pool.execute(clientThread);}} catch (IOException e) {System.err.println("Server exception: " + e.getMessage());e.printStackTrace();} finally {pool.shutdown();}}private static class ClientHandler implements Runnable {private Socket clientSocket;private ObjectOutputStream out;private ObjectInputStream in;public ClientHandler(Socket socket) {this.clientSocket = socket;}@Overridepublic void run() {try {out = new ObjectOutputStream(clientSocket.getOutputStream());in = new ObjectInputStream(clientSocket.getInputStream());Message message;while ((message = (Message) in.readObject()) != null) {System.out.println("Received: " + message);// Echo back to clientout.writeObject(message);out.flush();}} catch (IOException | ClassNotFoundException e) {System.out.println("Client disconnected: " + clientSocket.getInetAddress());} finally {try {if (in != null) in.close();if (out != null) out.close();if (clientSocket != null) clientSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
4. 创建客户端
创建client/src/Client.java
:
import java.io.*;
import java.net.*;
import java.util.Scanner;public class Client {private static final String SERVER_ADDRESS = "localhost";private static final int SERVER_PORT = 12345;public static void main(String[] args) {try (Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());ObjectInputStream in = new ObjectInputStream(socket.getInputStream());Scanner scanner = new Scanner(System.in)) {System.out.println("Connected to server at " + SERVER_ADDRESS + ":" + SERVER_PORT);// Thread for receiving messages from serverThread receiveThread = new Thread(() -> {try {Message receivedMessage;while ((receivedMessage = (Message) in.readObject()) != null) {System.out.println(receivedMessage);}} catch (IOException | ClassNotFoundException e) {System.out.println("Disconnected from server");}});receiveThread.start();// Main thread for sending messagesSystem.out.print("Enter your name: ");String name = scanner.nextLine();String input;while (true) {System.out.print("Enter message (or 'quit' to exit): ");input = scanner.nextLine();if ("quit".equalsIgnoreCase(input)) {break;}Message message = new Message(name, input);out.writeObject(message);out.flush();}} catch (UnknownHostException e) {System.err.println("Don't know about host " + SERVER_ADDRESS);} catch (IOException e) {System.err.println("Couldn't get I/O for the connection to " + SERVER_ADDRESS);e.printStackTrace();}}
}
配置VSCode
1. 创建工作区设置
在项目根目录创建.vscode/settings.json
:
{"java.project.sourcePaths": ["client/src","server/src","shared/src"],"java.project.outputPath": "bin","java.project.referencedLibraries": []
}
2. 配置启动任务
创建.vscode/launch.json
:
{"version": "0.2.0","configurations": [{"type": "java","name": "Launch Server","request": "launch","mainClass": "Server","projectName": "server","classPaths": ["shared/bin"]},{"type": "java","name": "Launch Client","request": "launch","mainClass": "Client","projectName": "client","classPaths": ["shared/bin"]}]
}
编译和运行
-
首先编译共享模块:
javac -encoding UTF-8 -d shared/bin shared/src/Message.java
-
编译服务器:
javac -encoding UTF-8 -cp "shared/bin" -d server/bin server/src/Server.java
-
编译客户端:
javac -encoding UTF-8 -cp "shared/bin" -d client/bin client/src/Client.java
-
运行服务器:
java -cp "server/bin;shared/bin" Server
-
运行客户端(在另一个终端):
java -cp "client/bin;shared/bin" Client
使用VSCode运行和调试
- 打开VSCode的"Run and Debug"视图
- 选择"Launch Server"配置并运行
- 选择"Launch Client"配置并运行(可以运行多个客户端实例)
注意:端口(12345)改成自己的,不要被占用
扩展建议
- 添加GUI界面(使用JavaFX或Swing)
- 实现数据库持久化
- 添加用户认证系统
- 实现群组聊天功能
- 添加文件传输功能
这个基础C/S架构为您提供了一个起点,您可以根据需要进一步扩展功能。