Bài giảng Lập trình MiniChat bằng VC++ dùng cơ chế xử lý sự kiện của Nguyễn Quang Hùng sau đây sẽ hướng dẫn các bạn một cách cụ thể và chi tiết về việc lập trình MiniChat bằng VC++. Mời các bạn tham khảo bài giảng để nắm bắt nội dung chi tiết, với các bạn chuyên ngành Công nghệ thông tin thì đây là tài liệu hữu ích.
Lập trình MiniChat VC++ dùng chế xử lý kiện Nguyễn Quang Hùng E-mail: hungnq2@dit.hcmut.edu.vn Website: www.dit.hcmut.edu.vn/~hungnq/courses.htm HCMC Univ Technology – Faculty of Information Technology Mục lục Bài tập sau cho phép làm quen với qui trình xây dựng chương trình theo giao diện “Dialog based” VC++ Dialog box chương trình MiniChat client: HCMC Univ Technology – Faculty of Information Technology Giao diện ch.trình MiniChat client Cửa sổ nhập thơng tin button “Connect” Cửa sổ nhập thông tin button “login” HCMC Univ Technology – Faculty of Information Technology Giao diện MS Visual C++ IDE Chạy Microsoft Visual C++từ Start Programs Microsoft Visual C++ HCMC Univ Technology – Faculty of Information Technology Tắt/Mở nhiều cửa sổ làm việc HCMC Univ Technology – Faculty of Information Technology Tạo new project AppWizard Dùng AppWizard để tạo project: Chọn menu File.New…, cửa sổ sau hiển thị Chọn trang Projects, chọn mục MFC AppWizard (exe), chọn thư mục chứa project textbox ‘Location’, thí dụ: f:\mmtnc Nhập tên project (MiniChatClient) vào textbox “Project name”, file tạo project chứa thư mục: f:\mmtnc\MiniChatClient HCMC Univ Technology – Faculty of Information Technology Tạo new project AppWizard (tiếp) Chọn button OK, cửa sổ sau xuất để dạng ứng dụng: Thí dụ chương trình ta dùng Dialog based, chọn mục “Dialog based”, chọn nút “Next”, cửa sổ sau xuất hiện: HCMC Univ Technology – Faculty of Information Technology Tạo new project AppWizard (tiếp) Thí dụ chương trình ta dùng Dialog based, chọn mục “Dialog based”, chọn nút “Next”, cửa sổ sau xuất hiện: Chọn mục “Windows Sockets” hiệu chỉnh lại title Dialog box chọn “Next” HCMC Univ Technology – Faculty of Information Technology Tạo new project AppWizard (tiếp) HCMC Univ Technology – Faculty of Information Technology Tạo new project AppWizard (tiếp) HCMC Univ Technology – Faculty of Information Technology Hiệu chỉnh t.t control (tiếp) Button “Connect” với tên IDC_CONNECT, “Group” với tên IDC_GROUPREQ, “Login” với IDC_LOGIN, Button “User” với IDC_USERREQ, “Send” với IDC_SENDMSG, “Logout” với IDC_LOGOUT Text box thông báo cần gởi với IDC_MESG, Listbox “Danh sách nhóm” với IDC_GROUPLIST, Listbox “Danh sách user nhóm” tên IDC_USERLIST, Listbox “Nội dung trao đổi với IDC_CONTENT” HCMC Univ Technology – Faculty of Information Technology Kết hợp biến hàm xử lý biến cố với control Tạo hàm xử lý biến cố cho button cách chọn button, chọn mục event cửa sổ Properties, cửa sổ sau xuất hiện: HCMC Univ Technology – Faculty of Information Technology Kết hợp biến hàm xử lý biến cố với control (tiếp) Phương pháp quy để khai báo biến hàm xử lý biến cố với phần tử giao diện dùng menu View.ClassWizard, cửa sổ ClassWizard xuất hiện, trang MessageMap cho phép khai báo hàm xử lý biến cố: HCMC Univ Technology – Faculty of Information Technology Kết hợp biến hàm xử lý biến cố với control (tiếp) Để tạo biến liệu kết hợp với control, chọn project, class chứa biến, trang Member variables, sau chọn ID phần tử ấn nút button “Add variable”, cửa sổ sau xuất hiện: HCMC Univ Technology – Faculty of Information Technology Kết hợp biến hàm xử lý biến cố với control (tiếp) Kết tạo biến kết hợp với phần tử giao diện HCMC Univ Technology – Faculty of Information Technology Tạo thêm hộp thoại từ menu Insert.Resource Chọn menu Insert.Resource để tạo hộp thoại sau: HCMC Univ Technology – Faculty of Information Technology Tạo thêm hộp thoại từ menu Insert.Resource (2) Khuôn mẫu hộp thoại sau: HCMC Univ Technology – Faculty of Information Technology Giao thức lớp ứng dụng Mini Chat Chức năng: Mơ hình lựa chọn: client/server Server: Cho phép nhiều user đăng ký vào nhóm để trị chuyện với Quản lý nhóm user nhóm Phân phối chuỗi thông tin từ user đến user khác Client: Giao tiếp với user Cho phép họ đăng ký nhóm; gởi/nhận thơng tin cho HCMC Univ Technology – Faculty of Information Technology Giao thức lớp ứng dụng Mini Chat (tiếp) Định nghĩa giao thức dùng cho hệ thống MiniChat: Lệnh GLIST Lệnh ULIST Lệnh LOGIN , Lệnh SEND Lệnh LOGOU Dạng reply cho tất request: N N = 1: Thành công, N = 0: Thất bại HCMC Univ Technology – Faculty of Information Technology Giao diện c.trình MiniChatServer Tương tự tạo chương trình MiniChat Server sau: HCMC Univ Technology – Faculty of Information Technology A SAMPLE HCMC Univ Technology – Faculty of Information Technology MINICHAT SERVER TRÊN VC++ BOOL CMiniChatServerDlg::OnInitDialog() { … // Tao socket moi, neu that bai bao sai ser_sock = socket(AF_INET,SOCK_STREAM,0); if(ser_sock==INVALID_SOCKET) { MessageBox("Khong tao duoc socket"); return TRUE; } // Thiet lap dia chi diem dau mut va bind no voi socket SOCKADDR_IN local_addr; Local_addr.sin_family=AF_INET; local_addr.sin_port=256; local_addr.sin_addr.s_addr=INADDR_ANY; if(bind(ser_sock,(LPSOCKADDR)&local_addr,sizeof(local_addr))== SOCKET_ERROR) { MessageBox("Khong bind socket duoc"); return TRUE; } HCMC Univ Technology – Faculty of Information Technology MINICHAT SERVER TRÊN VC++ (t.t) // Khai bao so yeu cau ket noi dong thoi if(listen(ser_sock,10)==SOCKET_ERROR) { MessageBox("Khong listen duoc"); return TRUE; } // Khai bao nhan du lieu bat dong bo + dong cau noi bat dong bo if (WSAAsyncSelect(ser_sock, m_hWnd, WSA_ACCEPT, FD_ACCEPT) > 0) { MessageBox("Error on WSAAsyncSelect()"); closesocket(ser_sock); } … } HCMC Univ Technology – Faculty of Information Technology MINICHAT SERVER TRÊN VC++ (t.t) // Accept yeu cau noi ket void CMiniChatServerDlg::OnAccept(void) { SOCKADDR_IN remote_addr; SOCKET sock; // Cho ket noi int len=sizeof(remote_addr); sock=accept(ser_sock,(LPSOCKADDR)&remote_addr,&len); if(sock==INVALID_SOCKET) { MessageBox("Khong accept duoc"); return; } T_UserRec *puser = new(T_UserRec); puser->sock = sock; puser->next = sock_no_user; sock_no_user = puser; // Khai bao nhan du lieu bat dong bo + dong cau noi bat dong bo if (WSAAsyncSelect(sock, m_hWnd, WSA_RDCLOSE, FD_READ|FD_CLOSE) > 0) { MessageBox("Error on WSAAsyncSelect()"); closesocket(sock); } } HCMC Univ Technology – Faculty of Information Technology MINICHAT SERVER TRÊN VC++ (t.t) // Doc vao request va xu ly void CMiniChatServerDlg::Request_Process(SOCKET sock) { int status; char mesg[MSG_LENGTH]; status = recv(sock, mesg, MSG_LENGTH, 0); if (status==0) return; mesg[status] = 0; if (strncmp(mesg,"LOGIN",5)==0) { // login Do_login(sock,mesg); } else if (strncmp(mesg,"LOGOU",5)==0) { // logout Do_logout(sock); } else if (strncmp(mesg,"GLIST",5)==0) { // group list Do_glist(sock); } else if (strncmp(mesg,"ULIST",5)==0) { // user list Do_ulist(sock); } else { // broadcast message Do_broadcastMesg(sock,mesg); } } HCMC Univ Technology – Faculty of Information Technology ...Mục lục Bài tập sau cho phép làm quen với qui trình xây dựng chương trình theo giao diện “Dialog based” VC++ Dialog box chương trình MiniChat client: HCMC Univ Technology... dụng thành cơng Dialog xuất VC++ IDE HCMC Univ Technology – Faculty of Information Technology Thiết kế giao diện ch .trình MiniChatClient Bắt đầu thiết kế giao diện chương trình, dùng controls... of Information Technology Kết hợp biến hàm xử lý biến cố với control (tiếp) Phương pháp quy để khai báo biến hàm xử lý biến cố với phần tử giao diện dùng menu View.ClassWizard, cửa sổ ClassWizard