java+jdbc+mysql+socket搭建局域网聊天室

yizhihongxing

搭建局域网聊天室的完整攻略需要分为两个大步骤:第一步是利用Java编写前端应用程序,第二步是搭建后端服务器和数据库。

前端应用程序

前端应用程序使用Java编写,涉及到JDBC的使用和Socket编程。

1. 编写UI界面

首先,需要编写一个简单的UI界面,用于用户输入聊天室的地址和端口号,以及昵称和消息发送框。

public class ChatRoomClientUI extends JFrame {
    private static final long serialVersionUID = 1L;
    private JTextArea chatRecordArea;      // 聊天内容展示区域
    private JTextField ipField;           // 地址输入框
    private JTextField portField;         // 端口号输入框
    private JTextField nickNameField;     // 昵称输入框
    private JTextField messageField;      // 消息发送框
    private JButton sendButton;           // 发送消息按钮

    public ChatRoomClientUI() {
        // ...... 界面初始化代码
    }
}

2. 连接聊天室服务器

其次,需要在前端应用程序中创建Socket连接服务器。代码如下:

public class ChatRoomClient {
    private String serverIp;    // 服务器IP地址
    private int serverPort;     // 服务器端口号
    private String nickName;    // 用户昵称
    private Socket socket;      // Socket

    public ChatRoomClient(String serverIp, int serverPort, String nickName) {
        // 连接服务器
        this.socket = new Socket(serverIp, serverPort);
        this.serverIp = serverIp;
        this.serverPort = serverPort;
        this.nickName = nickName;
    }
}

3. 实现消息发送功能

最后,需要实现消息的发送和接收功能。消息发送使用Java的输入流,代码如下:

public class ChatRoomClient {
    // ...... 其他代码

    public void sendMessage(String message) throws IOException {
        OutputStream out = socket.getOutputStream();
        out.write((nickName + ":" + message + "\r\n").getBytes());
        out.flush();
    }

    public void startReceiveMessage() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\r\n");
            chatRecordArea.setText(sb.toString());
        }
    }
}

后端服务器和数据库

后端服务器和数据库需要搭建在本地或局域网内。主要涉及到MySQL和Socket编程。

1. 搭建MySQL数据库

首先,需要在本地或局域网内搭建MySQL数据库。创建一个名为"chat_room"的数据库和一个名为"chat_record"的表,用于存储聊天记录。

CREATE DATABASE chat_room;
USE chat_room;
CREATE TABLE chat_record (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    message VARCHAR(2000) NOT NULL,
    create_time DATETIME DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2. 编写Socket服务器

其次,需要编写一个Java后端程序,用于启动Socket服务器和处理Socket连接请求。

public class ChatRoomServer {
    private static final int PORT = 8888;     // 服务器端口号

    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(PORT);
            System.out.println("聊天室服务器已经启动,监听端口 " + PORT + "......");
            while (true) {
                Socket socket = serverSocket.accept();
                new ChatRoomServerThread(socket).start();
            }
        } catch (IOException e) {
            System.out.println("服务器启动失败!");
            e.printStackTrace();
        }
    }
}

3. 处理Socket连接请求

最后,需要编写一个Java线程程序,用于处理Socket连接请求,将聊天记录存储到MySQL数据库中。

public class ChatRoomServerThread extends Thread {
    private Socket socket;

    public ChatRoomServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            while (true) {
                String message = reader.readLine();
                if (message == null) {
                    break;
                }
                System.out.println("收到来自" + socket.getInetAddress().getHostAddress() + "的消息:" + message);
                saveMessage(message);
            }
            reader.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void saveMessage(String message) {
        try (Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/chat_room", "root", "root")) {
            PreparedStatement preStmt = conn.prepareStatement("INSERT INTO chat_record (name, message, create_time) VALUES (?, ?, NOW())");
            preStmt.setString(1, message.split(":")[0]);
            preStmt.setString(2, message.split(":")[1]);
            preStmt.executeUpdate();
            preStmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

以上就是利用Java、JDBC、MySQL和Socket编程搭建局域网聊天室的完整攻略了。可以根据需要修改UI界面和数据库结构,增加更多的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java+jdbc+mysql+socket搭建局域网聊天室 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • Java常用工具类总结

    Java常用工具类总结 Java的工具类是提供各种工具方法以简化开发的一类类的类集合。这些类通常是一些静态方法的集合,用于完成一些常见的、通用的、与具体业务无关的操作。我们可以在自己的项目开发中借鉴这些工具类,从而提高我们的代码编写效率。 在这里,我们罗列几个常用的Java工具类,包括但不限于: StringUtils StringUtils是Apache …

    Java 2023年5月23日
    00
  • Java线程组与未处理异常实例分析

    Java线程组和未处理异常之间有一定的内在联系。在某些情况下,程序出现未处理异常之后可能会导致程序崩溃或者停止运行,这个时候我们需要通过Java线程组来捕获异常并进行处理。 什么是Java线程组 Java是一种多线程语言,线程是执行程序的基本单元。Java线程组是一组线程的集合,它可以将一组线程放在同一个组中,然后对这个组进行管理。Java线程组的主要作用是…

    Java 2023年5月27日
    00
  • JBuilder2005单元测试之创建测试固件

    首先,需要说明的是,JBuilder2005已经过时,现在推荐使用更加现代化的Java IDE,例如Eclipse、IntelliJ IDEA等。但是,本篇回答还是会根据题目要求讲解JBuilder2005中如何创建测试固件。 创建测试固件 测试固件可以理解为对于某个类或方法的测试环境的配置和准备,通常包括测试数据的设置、测试对象的初始化等。JBuilder…

    Java 2023年6月15日
    00
  • MyBatis详细执行流程的全纪录

    MyBatis详细执行流程的全纪录 MyBatis是一款基于Java的持久层框架,提供了丰富的SQL映射支持和灵活的结果映射配置。本文将介绍MyBatis的执行流程,并通过两个示例来详细讲解。 执行流程 MyBatis的执行流程主要分为以下几个步骤: 加载配置文件:MyBatis的配置文件包含了一系列的配置信息,例如数据库连接信息、SQL映射文件的位置和类型…

    Java 2023年5月20日
    00
  • 使用idea搭建一个spring mvc项目的图文教程

    下面是使用Idea搭建一个Spring MVC项目的详细攻略。 安装Idea:首先,我们需要安装Idea开发工具。可以去JetBrains官网下载最新版的Idea,并安装配置。 创建一个Maven项目:在Idea中选择File -> New -> Project,然后选择Maven项目模板。 配置pom.xml:在Maven项目中,pom.xml…

    Java 2023年5月19日
    00
  • Java struts2捕获404错误的方法汇总

    Java struts2捕获404错误的方法汇总 在使用Java struts2开发Web应用时,404错误是比较常见的错误之一。当客户端请求的URL在服务器中不存在时,就会返回404错误。而如何正确地捕获404错误,处理并给用户一个友好的提示信息,则需要开发者进行处理。 下面将介绍两种捕获404错误的方法: 方法一:利用struts2的异常处理机制 在st…

    Java 2023年5月20日
    00
  • JAVA velocity模板引擎使用实例

    下面是关于“JAVA velocity模板引擎使用实例”的详细讲解。 什么是Velocity模板引擎 Velocity模板引擎是一种基于文本模板的渲染引擎,支持将变量、逻辑处理、循环等结构和语法写在模板里面,然后使用程序将模板中的变量值替换成真正的值后输出。Velocity模板引擎是一种轻量级的模板引擎,具有易读易懂、易扩展等特点,被广泛应用于各种JAVA …

    Java 2023年5月19日
    00
  • Java EE实现用户后台管理系统

    听起来您需要了解如何使用Java EE实现用户后台管理系统的攻略,下面是一些基本步骤: 1. 确定需求和功能 在开发用户后台管理系统之前,首先需要明确系统的功能和需求。例如,您需要确定用户是否需要注册,登陆,管理数据等功能需求。这些需求和功能可以形成您设计和开发系统的蓝图。 2. 选择合适的框架 选择适合您的开发需求的框架是非常重要的。Java EE中有很多…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部