Tạo server đăng nhập theo giao thức POP3 - Java - Lập trình mạng - Source code demo - AFgame
Monday, 05-12-2016, 6:29 PM
AFgame                                               

Chi sẻ kiến thức lập trình - Các demo và ứng dụng mở


Welcome Guest
Menu
Demo - HTML Hack [3]
Java - Swing [5]
Java - 2D Graphics [1]
Java - IO [3]
Java - Audio [1]
Java - Lập trình mạng [2]
Java - Trí tuệ nhân tạo [7]
Java - Lập Trình Nâng Cao [5]
Java - BT Lập trình mạng [6]
Java - Common [2]
C# [1]
Android [15]
Database [1]
Jsp/Servlet [5]
Application [1]
Tài liệu [3]
Thành viên đăng bài [0]
Nơi dành cho thành viên đăng các bài viết hoàn chỉnh hoặc các câu hỏi
Search
Statistics

Total online: 1
Guests: 1
Users: 0
Tạo server đăng nhập theo giao thức POP3
09-05-2012, 11:19 AM

Download source code tại đây: http://adf.ly/7390380/demo-pop3

Kiểu đăng nhập theo giao thức Pop3 được mô tả như sau:
Người dùng nhập tên đăng nhập sau đó nhập mật khẩu. Nếu mật khẩu không đúng người dùng có thể nhập lại mật khẩu hoặc tên đăng nhập mới. Server sẽ lấy tên đăng nhập lần cuối cùng và mật khẩu vừa nhập vào để login, nếu login thất bại người dùng lại có thể tiếp tục nhập lại mật khẩu hoặc tên đăng nhập mới.

Trước hết cần tạo lớp user để làm dữ liệu người dùng bao gồm:

 

public class User {

    private String name;
    private String pass;

    public User(String name, String pass) {
        this.name = name;
        this.pass = pass;
    }

 

trong lớp user này chúng ta có các phương thức:

 

 @Override
    public String toString() {
        return name + ":" + pass;
    }

    public String getName() {
        return name;
    }

    public String getPass() {
        return pass;
    }

 

 

để lấy user name, password và toString để in ra màn hình chuỗi name và pass.

Tiếp theo tạo lớp DAO dùng chứa danh sách user, lớp này đóng vai trò khởi tạo dữ liệu user ban đầu và các phương thức checkUserExists, login

 

 

public class Dao {

    private ArrayList<User> listUser;

    public Dao() {
        listUser = new ArrayList<User>();
    }

    public void createData() {
        listUser.add(new User("admin", "123"));
        listUser.add(new User("user1", "user1"));
        listUser.add(new User("user2", "user2"));
        listUser.add(new User("user3", "user3"));
        listUser.add(new User("user4", "user4"));
        listUser.add(new User("user5", "user5"));
        System.out.println(listUser);
    }

    public boolean checkUserExists(String username) {
        for (User u : listUser) {
            if (u.getName().equalsIgnoreCase(username)) {
                return true;
            }
        }
        return false;
    }

    public boolean login(String username, String pass) {
        for (User u : listUser) {
            if (u.getName().equalsIgnoreCase(username) && u.getPass().equals(pass)) {
                return true;
            }
        }
        return false;
    }
}

 

 

Tạo lớp server. Các client sẽ kết nối thông qua cổng 12345

 

public class Server {

    private static final int PORT = 12345;

    public static void main(String[] args) throws IOException {
       
        ServerSocket serverSocket = new ServerSocket(PORT);
        while (true) {
            Socket socket = serverSocket.accept();
            ServerProc serverProc = new ServerProc(socket);
            serverProc.start();
        }
    }
}

 

 

Để server phục vụ được nhiều client cùng lúc, chúng ta tạo lớp serverProc extends Thread:

 

 

public class ServerProc extends Thread {

    private Socket socket;
    private BufferedReader netIn;
    private PrintWriter netOut;
    private String userName;
    private Dao dao;

    public ServerProc(Socket socket) throws IOException {
        this.socket = socket;
        this.netIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        this.netOut = new PrintWriter(socket.getOutputStream(), true);
        this.dao = new Dao();
        dao.createData();
        netOut.println("[SERVER] Welcome!");
    }

 

Phần protocol dưới đây là điểm mấu chốt để tạo cách đăng nhập kiểu giao thức POP3:

 

@Override
    public void run() {
        String command = null;
        try {
            while (true) {
                command = netIn.readLine();
                if (command.equalsIgnoreCase("quit")) {
                    break;
                } else {
                    if (command.indexOf("user: ") == 0) {
                        String tempUsername = command.substring(6, command.length());
                        boolean exists = checkUserName(tempUsername);
                        if (exists) {
                            netOut.println("[SERVER] '" + tempUsername + "' ton tai. Co the nhap lai username hoac tiep tuc nhap mat khau.");
                            userName = tempUsername;
                        } else {
                            netOut.println("[SERVER] Ten dang nhap '" + tempUsername + "' khong ton tai");
                            userName = null;
                        }
                    } else {
                        if (command.indexOf("pass: ") == 0) {
                            String pass = command.substring(6, command.length());
                            boolean lg = login(pass);
                            if (lg) {
                                netOut.println("[SERVER] Dang nhap duoi ten '" + userName + "' thanh cong!");
                            } else {
                                netOut.println("[SERVER] Dang nhap that bai!");
                            }
                        } else {
                            netOut.println("[SERVER] Unknow your command!");
                        }
                    }
                }
            }
            socket.close();
        } catch (Exception e) {
        }
    }


 private boolean checkUserName(String username) {
        return dao.checkUserExists(username);
    }

 private boolean login(String pass) {
        if (userName == null) {
            return false;
        } else {
            return dao.login(userName, pass);
        }
    }
}

Lưu ý hàm run() là hàm được override lại của Thread
Để test bạn và RUN-->gõ cmd--> telnet 127.0.0.1 12345

Category: Java - Lập trình mạng | Added by: as_fancy | Tags: Demo, java, Lap Trinh Mang, Login, khanh, LTM, as_fancy, POP3, BT, afgame
Views: 1268 | Rating: 5.0/1
Total comments: 0
Giới Thiệu
Nghe Radio Zing
- Nhiều kênh
- Thêm kênh tùy thích
- Hẹn giờ tắt



Hát karaoke arirang
- Tìm kiếm nhanh chóng
- Hát thoải mái
- Nhạc beat Arirang chính hãng

Copyright AFgame © 2016
Trường ĐH Nông Lâm TP.HCM
Create a free website with uCoz