当前位置: 首页 > news >正文

【VSCode】使用VSCode创建Java C/S架构项目

使用VSCode创建Java C/S架构项目

在VSCode中创建Java客户端/服务器(C/S)架构项目需要一些配置步骤。下面我将指导您完成整个过程。

环境准备

  1. 安装VSCode
  2. 安装Java扩展包(Extension Pack for Java)
  3. 安装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"]}]
}

编译和运行

  1. 首先编译共享模块:

    javac -encoding UTF-8 -d shared/bin shared/src/Message.java
    
  2. 编译服务器:

    javac -encoding UTF-8 -cp "shared/bin" -d server/bin server/src/Server.java
    
  3. 编译客户端:

    javac -encoding UTF-8 -cp "shared/bin" -d client/bin client/src/Client.java
    
  4. 运行服务器:

    java -cp "server/bin;shared/bin" Server
    
  5. 运行客户端(在另一个终端):

    java -cp "client/bin;shared/bin" Client
    

使用VSCode运行和调试

  1. 打开VSCode的"Run and Debug"视图
  2. 选择"Launch Server"配置并运行
  3. 选择"Launch Client"配置并运行(可以运行多个客户端实例)

注意:端口(12345)改成自己的,不要被占用

扩展建议

  1. 添加GUI界面(使用JavaFX或Swing)
  2. 实现数据库持久化
  3. 添加用户认证系统
  4. 实现群组聊天功能
  5. 添加文件传输功能

这个基础C/S架构为您提供了一个起点,您可以根据需要进一步扩展功能。

http://www.dtcms.com/a/353421.html

相关文章:

  • 如何用Renix实现网络测试自动化: 从配置分离到多厂商设备支持
  • 【网络编程】NtyCo协程服务器的框架(轻量级的协程方案,人称 “小线程”)
  • 从浏览器无法访问到Docker容器的 FastAPI 服务地址【宿主机浏览器和容器不在同一个网络层面:端口映射】
  • 前端AI应用实践指南:从基础概念到高级实现
  • 云手机的未来发展怎么样?
  • 数据结构(C语言篇):(二)顺序表
  • 状态设计模式
  • 手机冻结技术发展时间轴
  • Flutter项目详解
  • 深度学习实战117-各种大模型(Qwen,MathGPT,Deepseek等)解高考数学题的应用,介绍架构原理
  • C++工程实战入门笔记6-函数(三)关于base16编码的原理和函数模块化实战
  • LINUX --- 网络编程(二)
  • OpenAi在中国拿下“GPT”商标初审!
  • October 2019 Twice SQL Injection
  • Qt图片上传系统的设计与实现:从客户端到服务器的完整方案
  • 对比视频处理单元(VPU)、图形处理器(GPU)与中央处理器(CPU)
  • 多模态模型如何处理和理解图片
  • PPT处理控件Aspose.Slides教程:在.NET中开发SVG到EMF的转换器
  • STM32学习日记
  • 替身演员的艺术:pytest-mock 从入门到飙戏
  • Java基础 8.27
  • 如何使用windows实现与iphone的隔空投送(AirDrop)
  • 【Docker基础】Docker-compose数据持久化与卷管理:深入解析docker volume命令集
  • 【重学MySQL】八十九、窗口函数的分类和使用
  • Mysql杂志(三)
  • 【46页PPT】公司数字化转型规划与实践(附下载方式)
  • 学习Python中Selenium模块的基本用法(7:元素操作-1)
  • 应变片与分布式光纤传感:核心差异与选型指南
  • 极海发布APM32F425/427系列高性能MCU:助力工业应用升级
  • laravel学习并连接mysql数据库