搭建局域网聊天室的完整攻略需要分为两个大步骤:第一步是利用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技术站