Java Socket 服务器实现:用户认证与数据库查询
以下是一个简单的 Java 服务器端实现,可以实现与客户端的 Socket 连接,发送和接收相应的字符串,以及连接和查询数据库的功能,检索某用户名和密码是否为数据库中已经存储的值。该服务器端使用了 MySQL 数据库。
import java.io.*;
import java.net.*;
import java.sql.*;
public class Server {
public static void main(String[] args) {
try {
// 创建 ServerSocket 对象,监听端口号为 8888
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
// 等待客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端已连接:" + socket.getRemoteSocketAddress());
// 创建输入输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 连接 MySQL 数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("数据库连接成功!");
// 读取客户端发送的字符串,格式为'用户名 密码'
String input = in.readLine();
System.out.println("客户端发送的字符串:" + input);
// 查询数据库,检索用户名和密码是否为已经存储的值
String[] parts = input.split(" ");
String username = parts[0];
String pwd = parts[1];
String sql = "SELECT * FROM users WHERE username='" + username + "' AND password='" + pwd + "'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
boolean found = rs.next();
// 发送查询结果给客户端
if (found) {
out.println("认证成功!");
} else {
out.println("认证失败!");
}
// 关闭连接
rs.close();
stmt.close();
conn.close();
in.close();
out.close();
socket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
该服务器端使用了 Java 的 Socket 编程实现与客户端的连接,使用了 Java 的 JDBC 技术连接 MySQL 数据库,查询用户名和密码是否为已经存储的值,并将查询结果发送给客户端。需要注意的是,该服务器端仅适用于单个客户端连接,如果需要支持多个客户端连接,需要使用多线程编程实现。
原文地址: https://www.cveoy.top/t/topic/kfSy 著作权归作者所有。请勿转载和采集!