使用TCP编程实现简单登录功能

发布于:2024-12-07 ⋅ 阅读:(28) ⋅ 点赞:(0)

在Java中,使用TCP编程实现登录功能通常涉及以下步骤:

  • 创建服务器端,监听特定端口,等待客户端连接。
  • 创建客户端,连接到服务器端。
  • 客户端发送用户名和密码到服务器端。
  • 服务器端验证用户名和密码。
  • 服务器端返回验证结果给客户端。 以下是一个简单的示例,展示了如何使用Java的SocketServerSocket类来实现一个基础的登录功能。

服务器端代码

import java.io.*;
import java.net.*;
public class LoginServer {
    private ServerSocket serverSocket;
    public LoginServer(int port) throws IOException {
        serverSocket = new ServerSocket(port);
        System.out.println("Server started. Listening on port: " + port);
    }
    public void startServer() {
        while (true) {
            try {
                Socket clientSocket = serverSocket.accept();
                new ClientHandler(clientSocket).start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    private static class ClientHandler extends Thread {
        private Socket clientSocket;
        public ClientHandler(Socket socket) {
            this.clientSocket = socket;
        }
        public void run() {
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
                // Read username and password from client
                String username = in.readLine();
                String password = in.readLine();
                // Simple authentication (for demonstration purposes)
                if ("user".equals(username) && "pass".equals(password)) {
                    out.println("Login successful");
                } else {
                    out.println("Login failed");
                }
                // Close resources
                in.close();
                out.close();
                clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) throws IOException {
        LoginServer server = new LoginServer(1234);
        server.startServer();
    }
}

客户端代码

import java.io.*;
import java.net.*;
public class LoginClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 1234);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        // Get username and password from user
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter username: ");
        String username = stdin.readLine();
        System.out.print("Enter password: ");
        String password = stdin.readLine();
        // Send username and password to server
        out.println(username);
        out.println(password);
        // Read response from server
        String response = in.readLine();
        System.out.println("Server response: " + response);
        // Close resources
        in.close();
        out.close();
        socket.close();
    }
}

运行结果

  1. 首先运行服务器端代码,服务器将开始监听端口1234。
  2. 运行客户端代码,客户端将提示用户输入用户名和密码。
  3. 用户输入用户名和密码后,客户端将这些信息发送到服务器。
  4. 服务器验证信息,并发送登录成功或失败的消息给客户端。
  5. 客户端打印出服务器的响应。 请注意,这个示例是非常基础的,没有实现加密、错误处理、多线程安全、连接池等生产环境中需要考虑的特性。在实际应用中,密码应该通过加密方式传输,并且服务器端应该有更安全的认证机制。