Bài giảng môn Lập trình mạng – Chương 2&3: Lập trình MiniChat
lượt xem 5
download
Bài giảng môn Lập trình mạng – Chương 2&3: Lập trình MiniChat dùng VC++ bằng cơ chế xử lý sự kiện. Những nội dung chính trong chương gồm có: Giới thiệu chương trình minichat, giao diện chương trình minichat, xử lý biến cố trên VC++, minichat server trên VC++, kỹ thuật java Multithread, minichat server trên Jbuider,… Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng môn Lập trình mạng – Chương 2&3: Lập trình MiniChat
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MINICHAT CHƯƠNG II, III Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 1 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM GIỚI THIỆU C.TRÌNH MINICHAT z Chức năng – Cho phép nhiều user đăng ký vào các nhóm để trò chuyện với nhau. z Mô hình lựa chọn – Client/server z Server – Quản lý các nhóm và các user của từng nhóm. – phân phối chuỗi thông tin từ một user đến các user khác. z Client – Giao tiếp với các user. – Cho phép họ đăng ký nhóm; gởi/nhận thông tin cho nhau. Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM GIỚI THIỆU C.TRÌNH MINICHAT z 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 z Dạng reply cho tất cả các request – N – N = 1: Thành công, N = 0: Thất bại Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 3 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM GIAO DIỆN C.TRÌNH MINICHAT Cửa sổ nhập thông tin của button “Connect” Cửa sổ nhập thông tin của button “login” Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM XỬ LÝ BIẾN CỐ TRÊN VC++ z Tạo hàm xử lý biến cố cho từng button bằng cách chọn từng button, chọn mục event trong cửa sổ Properties, cửa sổ sau xuất hiện: Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 5 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM XỬ LÝ BIẾN CỐ TRÊN VC++ (t.t) z Phương pháp chính quy để khai báo biến và hàm xử lý biến cố với các phần tử giao diện là dùng menu View.ClassWizard, cửa sổ ClassWizard xuất hiện, trang MessageMap cho phép khai báo các hàm xử lý biến cố: Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM XỬ LÝ BIẾN CỐ TRÊN VC++ (t.t) z Để tạo các biến dữ liệu kết hợp với các control, chọn project, class chứa biến, trang Member variables, sau đó chọn từng ID phần tử rồi ấn nút button “Add variable”, cửa sổ sau xuất hiện: Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 7 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM XỬ LÝ BIẾN CỐ TRÊN VC++ (t.t) z Kết quả tạo 4 biến kết hợp với 4 phần tử giao diện. Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM 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; } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 9 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM 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); } … } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM MINICHAT SERVER TRÊN VC++ (t.t) // Accept 1 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); } } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 11 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM 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); } } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM KỸ THUẬT JAVA Multithread z Thread – Một luồng thực thi trong một chương trình. – Máy ảo JVM cho phép một ứng dụng có nhiều luồng thực thi đồng thời. z Có 2 cách dùng Java multithread (đa luồng): – Khai báo một lớp kế thừa từ lớp Thread và override method Thread.run(). – Khai báo một lớp hiện thực interface Runnable và method Runnable.run() Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 13 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM KỸ THUẬT JAVA Multithread 1. class PrimeThread extends Thread { 2. long minPrime; 3. PrimeThread( long minPrime ) { 4. this.minPrime = minPrime; 5. } 6. public void run( ) { 7. // compute primes larger than minPrime 8. ... 9. } 10. } 11. PrimeThread p = new PrimeThread(143); 12. p.start(); Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM KỸ THUẬT JAVA Multithread 1. class PrimeRun implements Runnable { 2. long minPrime; 3. PrimeRun ( long minPrime ) { 4. this.minPrime = minPrime; 5. } 6. public void run() { 7. // compute primes larger than minPrime 8. ... 9. } 10. } 11. PrimeRun p = new PrimeRun(143); 12. new Thread(p).start(); Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 15 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM MINICHAT SERVER TRÊN JBuider Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM MINICHAT SERVER TRÊN JBuider //Constructor của frame public MiniChatServerDlg() { … // Tao sersersocket lang nghe cho server try { serverSocket = new ServerSocket( SERVER_PORT, 100 ); DefaultListModel lmContent = (DefaultListModel)jlbContent.getModel(); lmContent.addElement("Server listening on port " + SERVER_PORT + " ..."); // tạo thread con để chờ new ServerAcceptThread(this,serverSocket).start(); } // end try // handle exception creating server and connecting clients catch ( IOException ioException ) { ioException.printStackTrace(); } … } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 17 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM MINICHAT SERVER TRÊN JBuider (t.t) public class ServerAcceptThread extends Thread { ServerSocket serverSocket; MiniChatServerDlg serverChat; public ServerAcceptThread(MiniChatServerDlg server, ServerSocket sock) { serverSocket = sock; serverChat = server; } public void run() { T_UserRec puser; try { // listen for clients constantly while (true) { // accept new client connection Socket clientSocket = serverSocket.accept(); puser = new T_UserRec(); puser.sock = clientSocket; puser.next = serverChat.m_sock_no_user; serverChat.m_sock_no_user = puser; Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM MINICHAT SERVER TRÊN JBuider (t.t) // create new ReceivingThread for receiving messages from client new ReceivingThread(serverChat, clientSocket).start(); // print connection information DefaultListModel lmContent = (DefaultListModel)serverChat.jlbContent.getModel(); lmContent.addElement("Connection received from: " + clientSocket.getInetAddress()); serverChat.SendMessage(clientSocket,"Request accepted"); } // end while } // handle exception creating server and connecting clients catch ( IOException ioException ) { ioException.printStackTrace(); } } } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 19 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM TOÅNG KEÁT z Giới thiệu chương trình MiniChat z Cách viết chương trình trên Visual C++ z Cách viết chương trình trên JBuilder Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình mạng: Ôn tập thi hết môn Lập trình mạng - Phạm Trần Vũ
17 p | 121 | 11
-
Bài giảng môn Lập trình mạng: Chương 4 - TS. Nguyễn Văn Hiệp
14 p | 80 | 8
-
Bài giảng môn Lập trình mạng: Chương 9 - TS. Nguyễn Văn Hiệp
19 p | 76 | 8
-
Bài giảng Nhập môn lập trình: Chương 6 - Trần Minh Thái
16 p | 67 | 7
-
Bài giảng Nhập môn lập trình: Các thuật toán trên mảng hai chiều - ThS. Nguyễn Đông Hà
16 p | 95 | 6
-
Bài giảng môn Lập trình mạng – Chương 4: DHMTL và lập trình Web chạy ở client
17 p | 38 | 6
-
Thực trạng và giải pháp nâng cao hiệu quả dạy học các môn Lập trình của sinh viên khoa Công nghệ thông tin
8 p | 51 | 5
-
Bài giảng Nhập môn lập trình - Bài 4: Mạng máy tính
12 p | 80 | 4
-
Bài giảng Lập trình mạng: Mở đầu - Bùi Minh Quân
4 p | 52 | 4
-
Bài giảng Nhập môn lập trình: Mảng dữ liệu - Trần Phước Tuấn
15 p | 54 | 4
-
Bài giảng Nhập môn lập trình: Vòng lặp và cấu trúc mảng - ThS. Nguyễn Đông Hà
13 p | 68 | 4
-
Bài giảng Nhập môn lập trình: Mẫu tin và mảng hai chiều - ThS. Nguyễn Đông Hà
16 p | 75 | 3
-
Bài giảng Nhập môn lập trình: Chương giới thiệu - ThS. Nguyễn Đông Hà
9 p | 79 | 3
-
Bài giảng Lập trình mạng - Nguyễn Hữu Thể
4 p | 64 | 3
-
Bài giảng Lập trình mạng Java: Chương 0 - ThS. Nguyễn Minh Thành
8 p | 74 | 3
-
Bài giảng Nhập môn về lập trình - Chương 7: Mảng (Array)
8 p | 46 | 3
-
Bài giảng Lập trình mạng: Giới thiệu môn học - TS. Nguyễn Hoài Sơn
13 p | 95 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn