đồ án lập trình mạng

43 402 0
đồ án lập trình mạng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC DANH SÁCH HÌNH VẼ iv DANH SÁCH BẢNG BIỂU v LỜI MỞ ĐẦU PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH TIÊU ĐỀ: CHƯƠNG CƠ SỞ LÝ THUYẾT Giới thiệu Hook 2 Cơ chế Hook – Hook chain Các loại Hook Hook Procedure Cài đặt hook 5.1 Cài đặt Filter Function vào chuỗi Filter Function hook 5.2 Gỡ bỏ Filter Function khỏi chuỗi Filter Function hook 5.3 Gọi Filter Function chuỗi Filter Function Thư viện liên kết động DLL 6.1 Khái niệm 6.2 Cách thức hoạt động 6.3 Các loại liên kết động 6.4 Tại sử dụng DLL CHƯƠNG PHÂN TÍCH THIẾT KẾ HỆ THỐNG 10 Yêu cầu chức 10 Yêu cầu giao diện 10 Thuật toán 10 Cơ sở liệu 10 CHƯƠNG TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ 11 Triển khai 11 1.1 Môi trường triển khai 11 1.2 Cấu trúc project 11 Kết 12 Đánh giá kết 13 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 13 Những kết đạt 13 Những vấn đề tồn 13 Hướng phát triển 14 PHẦN 2: LẬP TRÌNH MẠNG 15 TIÊU ĐỀ: 15 i CHƯƠNG CƠ SỞ LÝ THUYẾT 15 Socket 15 1.1 Khái niệm đặc tính 15 1.2 Các constructor 15 1.3 Hàm lấy thông tin Socket 16 1.4 Lớp ServerSocket 16 Mô hình Client – Server 17 2.1 Khái niệm đặc tính 17 2.2 Cách thức hoạt động 18 2.3 Các kiến trúc Client – Server 18 CHƯƠNG PHÂN TÍCH THIẾT KẾ HỆ THỐNG 20 Cờ gánh 20 1.1 Giới thiệu 20 1.2 Cách chơi 21 Phân tích yêu cầu 22 2.1 Yêu cầu chức 22 2.2 Yêu cầu giao diện 22 Thiết kế hệ thống 22 Xây dựng chương trình 23 4.1 Package socket.io 23 4.2 Đóng gói liệu 23 4.3 Xử lý liệu sau nhận 25 4.4 Giá trị điều khiển 25 4.5 Phòng chơi 26 4.6 Bàn cờ quân cờ 26 4.7 Thuật toán 26 CHƯƠNG TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ 30 Triển khai 30 1.1 Môi trường phát triển ứng dụng: 30 1.2 Cấu trúc chương trình 30 Kết 33 Đánh giá kết 36 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 36 Những kết đạt 36 Những vấn đề tồn 36 Hướng phát triển 36 KẾT LUẬN CHUNG 36 ii TÀI LIỆU THAM KHẢO 37 PHỤ LỤC 38 iii DANH SÁCH HÌNH VẼ Hình Hook chain Hình Cấu trúc table word 11 Hình Cấu trúc project ứng dụng gõ tắt 12 Hình Giao diện ứng dụng gõ tắt 13 Hình Mô hình client - server tầng 19 Hình Mô hình client - server tầng 20 Hình Cờ gánh 21 Hình Định dạng liệu 24 Hình Cấu trúc project Game Server 31 Hình 10 Cấu trúc Cờ Gánh Client 32 Hình 11 Giao diện đăng nhập 33 Hình 12 Giao diện đăng kí 34 Hình 13 Màn hình 35 Hình 14 Giao diện bàn chơi 35 Hình 15 Giao diện chơi game 36 iv DANH SÁCH BẢNG BIỂU Bảng Các loại hook tầm ảnh hưởng v LỜI MỞ ĐẦU Nguyên lý hệ điều hành Lập trình Mạng tảng mà người lập trình phải hiểu rõ để nắm bắt kiên thức cao Hệ điều hành thành phần trung gian, cầu nối cho giao tiếp người dung máy tính Thông qua hệ điều hành, người sử dụng dễ dàng làm việc khai thác hiệu thiết bị phần cứng Cũng vậy, với phát triển lĩnh vực mạng nay, việc nghiên cứu, nắm vững Mạng thực quan trọng người lập trình PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH TIÊU ĐỀ: Tìm hiêu kỹ thuật lập trình Hook Xây dựng ứng dụng gõ tắt Sử dụng ngôn ngữ lập trình C# CHƯƠNG CƠ SỞ LÝ THUYẾT Giới thiệu Hook Trong Windows, thực thao tác nhấp chuột, nhấn phím… hệ điều hành chuyển kiện thành thông điệp (message) đưa vào hàng đợi (queue) hệ thống Sau đó, thông điệp trao lại cho ứng dụng cụ thể để xử lý Hook chế mà ứng dụng chặn kiện, thông điệp, thao tác chuột, bàn phím Hàm dùng để chặn loại kiện riêng biệt gọi hook procedure/ hook function Mỗi nhận kiện, hook procedure thay đổi chí hủy bỏ kiện Xét phạm vi hoạt động có loại Hook: - Local hook (thread hook): có ảnh hưởng phạm vi thread - Global hook: có ảnh hưởng toàn hệ thống Trường hợp này, hook procedure phải chứa thư viện DLL Một số ví dụ sử dụng hook: - Tạo chức debug - Tạo chương trình record play back macro - Bắt giả lập kiện bàn phím chuột - Tạo chức Help(F1) cho ứng dụng - Tạo ứng dụng computer-based training (CBT) Cơ chế Hook – Hook chain Hệ điều hành trì danh sách hook procedure cho loại kiện Mỗi danh sách Hook procedure gọi hook chain Bản chất hook chain dãy trỏ hàm trỏ đến Hook procedure Khi hệ thống thực kiện đó, tìm kiếm hook chain tương ứng với kiện Nếu hook procedure phù hợp tìm thấy, hệ thống thực lấy lại quyền điều khiển sau hook chain kết thúc Vì hook procedure thực xong, phải thực việc chuyển quyền điều khiển cho hook procedure hook chain Tuy nhiên chế tùy thuộc vào loại hook Như số loại hook theo dõi thông điệp, cho dù hook procedure có chuyển quyền điều khiển cho hook procedure hay không, hệ thống tự động làm việc Hook kỹ thuật xử lý thông điệp mạnh cho phép can thiệp sâu vào tiến trình khác nhau, làm ảnh hưởng tới tốc độ hệ thống, hook system-wide, tất kiện hệ thống định hướng tới hàm đó, rõ ràng điều làm hệ thống chậm đáng kể Vì ta hên hook thông điệp thật cần thiết kết thúc việc hook không dùng đến Hình Hook chain Các loại Hook Có nhiều loại hook phân biệt dựa vào kiện, thông điệp mà Hook procedure can thiệp vào Danh sách liệt kê loại hook kèm với link dẫn đến tham khảo từ MSDN: - WH_CALLWNDPROC and WH_CALLWNDPROCRET - WH_CBT - WH_DEBUG - WH_FOREGROUNDIDLE - WH_GETMESSAGE - WH_JOURNALPLAYBACK - WH_JOURNALRECORD - WH_KEYBOARD_LL - WH_KEYBOARD - WH_MOUSE_LL - WH_MOUSE - WH_MSGFILTER and WH_SYSMSGFILTER - WH_SHELL Hook Procedure Hook procedure loại callback function Hệ thống gọi hàm kiện, thông điệp tương ứng với loại hook Mỗi loại hook có hook procedure khác có tham số cú pháp bên Với hook procedure khác việc xét giá trị tham số khác Lập trình viên sử dụng dụng hàm SetWindowsHookEx để cài đặt hook procedures vào hook chain Một hook procedures có cú pháp sau: LRESULT CALLBACK HookProc( int nCode, WPARAM wParam, LPARAM lParam ) { //process event return CallNextHookEx(NULL, nCode, wParam, lParam); } Ý nghĩa tham số truyền vào hàm: nCode : tham số thường gọi “hook code”, Hook procedure sử dụng giá trị để định cách thức xử lý kiện Giá trị hook code tùy thuộc vào loại hook cụ thể, loại hook có tập hợp giá trị hook code đặc trưng riêng Có quy luật mà dường Hook procedure loại hook cần tuân thủ: Window truyền cho hàm giá trị hook code âm, Hook procedure không xử lý kiện mà phải gọi hàm CallNextHookEx với tham số mà hệ điều hành truyền cho Sau đó, phải trả giá trị trả hàm CallNextHookEx wParam, lParam: Đây thông tin cần thiết cho Hook procedure trình xử lý kiện Các giá trị có ý nghĩa khác tuỳ thuộc vào loại hook Ví dụ: Hook procedure gắn với hook WH_KEYBOARD nhận mã phím ảo (Virtual-Key Code) từ wParam, đồng thời có từ lParam thông tin mô tả trạng thái bàn phím kiện gõ phím xảy Cài đặt hook 5.1 Cài đặt Filter Function vào chuỗi Filter Function hook Tác vụ thực thông qua hàm SetWindowsHookEx Cú pháp: HHOOK WINAPI SetWindowsHookEx( _In_ int idHook, _In_ HOOKPROC lpfn, _In_ HINSTANCE hMod, _In_ DWORD dwThreadId ); Tham số: - idHook: Xác định loại hook mà ta muốn cài đặt, tham số giá trị sau: • WH_CALLWNDPROC : đặt thủ tục hook quản lý thông điệp trước lúc hệ thống gởi chúng tới cửa sổ đích • WH_CALLWNDPROCRET : đặt thủ tục hook quản lý thông điệp sau chúng xử lý thủ tục cửa sổ đích • WH_CBT : đặt thủ tục hook nhận thông báo có ích tới ứng dụng huấn luyện sở tính toán (CBT) • WH_DEBUG : đặt thủ tục hook có ích cho việc debug thủ tục hook khác • WH_FOREGROUNDIDLE : đặt thủ tục hook gọi thread foreground ứng dụng trở thành không dùng đến Hook có ích cho hoạt động nhiệm vụ (task) độ ưu tiên thấp thời gian không dùng đến • WH_GETMESSAGE : đặt thủ tục hook quản lý thông điệp post tới hàng đợi thông điệp •WH_JOURNALPLAYBACK : đặt thủ tục hook post thông điệp ghi trước thủ tục hook WH_JOURNALRECORD •WH_JOURNALRECORD : đặt thủ tục hook ghi thông điệp đầu vào post tới hàng thông điệp hệ thống Hook có ích cho việc ghi macro • WH_KEYBOARD : đặt thủ tục hook quản lý thông điệp keystroke • WH_MOUSE : đặt thủ tục hook quản lý thông điệp chuột • WH_MSGFILTER: đặt thủ tục hook quản lý thông điệp kết sinh kết cuả kiện đầu vào dialog box, message box, menu hay scroll bar • WH_SYSMSGFILTER : đặt ứng dụng thông điệp kết sinh kết kiện đầu vào dialog box, message box, menu hay scroll bar Thủ tục hook quản lý thông điệp cho tất ứng dụng hệ thống Có class làm chức Helper.java CTRL.java Dữ liệu đóng gói theo định dạng sau : Hình Định dạng liệu Trong : - CTRL byte điều khiển lấy class CTRL.java Hàm đóng gói mảng integer thàng mảng byte: public static byte[] prepareData(byte signal, int[] data) { ArrayList arlData = new ArrayList(); for(int i:data) arlData.add(Util.intToByteArray(i)); return prepareData(signal, arlData); } Hàm gộp danh sách mảng byte: public static byte[] prepareData(byte signal, ArrayList arlData) { int len = * arlData.size() + + 1; for(byte[] buf:arlData) len += buf.length; byte[] data = new byte[len]; int pos = 5; data[0] = signal; System.arraycopy(Util.intToByteArray(arlData.size()), 0, data, 1, 4); for(byte[] buf:arlData) { System.arraycopy(Util.intToByteArray(buf.length), 0, data, pos, 4); System.arraycopy(buf, 0, data, pos + 4, buf.length); pos += buf.length + 4; } return data; } Hàm gộp mảng mảng byte: public static byte[] prepareData(byte signal, byte[] arrData) { int len = * arrData.length + + 1; for(byte[] buf:arrData) len += buf.length; byte[] data = new byte[len]; int pos = 5; data[0] = signal; System.arraycopy(Util.intToByteArray(arrData.length), 0, data, 1, 4); for(byte[] buf:arrData) 24 { System.arraycopy(Util.intToByteArray(buf.length), 0, data, pos, 4); System.arraycopy(buf, 0, data, pos + 4, buf.length); pos += buf.length + 4; } return data; } 4.3 Xử lý liệu sau nhận Khi liệu gửi đóng gọi cần xư lý liệu sau nhận được, hàm praseData lớp Helper.java đảm nhận việc public static ArrayList parseData(byte[] data) { //skip byte first int len = Util.byteArrayToInt(new byte[]{data[1], data[2], data[3], data[4]}); ArrayList arlData = new ArrayList(len); int idx = 5; for(int i = 0; i < len; i++) { int blen = Util.byteArrayToInt(new byte[]{data[idx], data[idx + 1], data[idx + 2], data[idx + 3]}); byte[] buf = new byte[blen]; System.arraycopy(data, idx + 4, buf, 0, blen); arlData.add(buf); idx += blen + 4; } return arlData; } Byte mang giá trị CTRL tách khỏi mảng 4.4 Giá trị điều khiển Cả client server chứa lớp CTRL.java định nghĩa số để xác định loại tin nhắn gửi đên public final class CTRL { public static final byte public static final byte public static final byte public static final byte public static final byte SIGNUP = 0; LOGIN = 1; ENTER_TABLE = 3; ENTER_GAME = 4; MOVE = 5; …… } Khi nhận gói liệu nhận chương trình so sánh byte mảng liệu với số lớp CTRL.java để biết liệu có ý nghĩa Ví dụ: Client đăng nhập gửi mảng byte, byte liệu gửi có giá trị 1(CTRL.LOGIN) 25 4.5 Phòng chơi Lớp Table.java chứa trạng thái phòng chơi bao gồm tên người chơi trạng thái phòng chơi, thời gian chơi… Một danh sách đối tượng Table tạo để quản lý đối tượng phòng chơi Khi trao đổi liệu client server dựa vào id table để xác định thay đổi Table 4.6 Bàn cờ quân cờ Lớp Chessman.java đối tượng quân cờ, bao gồm vị trí, kiểu, màu sắc quân cờ bàn cờ Lớp Board.java chứa trạng thái bàn chơi, xử lý nước đi, cách ăn quân Các quân cờ quản lý danh sách (ArrayList đối tượng lớp Chessman.java lớp Board.java armies;) Do mục đích bên client-server khác nên việc tạo đối tượng bàn cờ quân cờ bên khác : - Client : trình khởi chạy có đối tượng lớp Board.java khởi tạo Các quân cờ đồng từ phía server nhảy vào bàn chơi - Server : đối tượng lớp Table chứa đối tượng lớp Board.java, quân cờ khởi tạo bàn cờ khởi tạo 4.7 Thuật toán 4.7.1 Tìm nước hợp lệ quân cờ Trên bàn cờ gánh có tất 25 vị trí mà quân cờ tới để xác định nước hợp lệ, cần xây dựng hàm trả mảng các điểm tới từ vị trí Các vị trí bàn cờ đánh số từ -> 24 theo chiều từ trái qua phải, từ xuống dưới, điểm bên trái có giá trị Hàm sau trả mảng vị trí mà quân cờ tới từ vị trí pos ban đầu : public int[] goTo(int pos) { /* > ** | ** v */ switch(pos){ case 0: return new int[]{1, case 1: return new int[]{0, case 2: return new int[]{1, case 3: return new int[]{2, case 4: return new int[]{3, case 5: 5, 6}; 2, 6}; 3, 6, 7, 8}; 4, 8}; 8, 9}; 26 return case 6: return case 7: return case 8: return case 9: return case 10: return case 11: return case 12: return case 13: return case 14: return case 15: return case 16: return case 17: return case 18: return case 19: return case 20: return case 21: return case 22: return case 23: return case 24: return default: return } new int[]{0, 6, 10}; new int[]{0, 1, 2, 5, 7, 10, 11, 12}; new int[]{2, 6, 8, 12}; new int[]{2, 3, 4, 7, 9, 12, 13, 14}; new int[]{4, 8, 14}; new int[]{5, 6, 11, 15, 16}; new int[]{6, 10, 12, 16}; new int[]{6, 7, 8, 11, 13, 16, 17, 18}; new int[]{12, 8, 14, 18}; new int[]{8, 9, 13, 18, 19}; new int[]{10, 16, 20}; new int[]{10, 11, 12, 15, 17, 20, 21, 22}; new int[]{12, 16, 18, 22}; new int[]{12, 13, 14, 17, 19, 22, 23, 24}; new int[]{14, 18, 24}; new int[]{15, 16, 21}; new int[]{20, 16, 22}; new int[]{16, 17, 18, 21, 23}; new int[]{22, 18, 24}; new int[]{23, 18, 19}; new int[]{}; } Hàm goTo trả vị trí tới trường hợp bàn cờ trống Vì để xác định vị trí hợp lệ cần loại loại bỏ điểm mà có quân cờ trước Hàm guest(int pos) lấy nước hợp lệ public int[] guest(int pos) { int[] gt = goTo(pos); ArrayList arl = new ArrayList(); for(int p:gt) { boolean f = false; for(Chessman ch:armies) if(f = (ch.pos == p)) break; 27 if(!f) arl.add(p); } int[] gst = new int[arl.size()]; for(int i = 0; i < arl.size(); i++) gst[i] = arl.get(i); return gst; } 4.7.2 Xác định trạng thái ăn quân đối phương Có hai cách để ăn quân cờ đối phương gánh vây, ta xây dựng hai giải thuật để tìm kiếm quân cờ đối phương trạng thái gánh vây 4.7.2.1 Xác định nước gánh Hai quân cờ đối phương bị gánh có nước tới trung điểm quân cờ Vì ta tìm quân cờ đối phương nằm lân cận quân cờ vừa đi, kiểm tra trạng thái Lần lượt kiểm tra cặp quân cờ xem có nằm đường thẳng hay không? Nếu nằm đường cặp quân cờ bị gánh Hàm sau tìm quân cờ bị gánh: public ArrayList between(boolean type, int npos) { ArrayList alPos = getChessmanEnemy(type, npos); ArrayList pair = new ArrayList(); int cp = npos % 5; int rp = npos / 5; for(int i = 0; i < alPos.size(); i++) for(int j = i + 1; j < alPos.size(); j++) { Pair pr = new Pair(alPos.get(i), alPos.get(j)); boolean f = false; for(Pair ppr:pair) if(f = ppr.compare(pr)) break; if(f) continue; int col = alPos.get(i) int row = alPos.get(i) int c = alPos.get(j) % int r = alPos.get(j) / % 5; / 5; 5; 5; if((c == col && Math.abs(r - row) == && cp == c) || (r == row && Math.abs(c - col) == && rp == r) || (Math.abs(c - col) == Math.abs(r - row) && Math.abs(r - row) == && Math.abs(rp - r) == Math.abs(rp - row) && Math.abs(cp - c) == Math.abs(cp - col))) pair.add(pr); } return pair; } public ArrayList getChessmanEnemy(boolean type, int npos) { int[] next = goTo(npos); 28 ArrayList alPos = new ArrayList(); for(int p:next) { Chessman c = findChessman(p); if(c == null) continue; if(c.type == type) continue; alPos.add(p); } return alPos; } 4.7.2.2 Kiểm tra quân cờ trạng thái vây Một quân cờ sở trang thái vây xung quang toàn quân cờ đối phương quân cần lân cận bị vây Các bước để xác định quân cờ trạng thái vây là: B1 Khởi tạo danh sách allPos chứa tất điểm mà có quân cờ kiểu Tìm tất điểm xung quanh đưa điểm có quân cờ kiểu vào allPos (dùng hàm goTo() để lấy giá trị xung quanh) B2 Duyệt từ đầu đến cuối danh sách allPos Với điểm allPos ta tìm điểm lân cận điểm đưa điểm có quân cờ kiểu vào allPos (không lấy vị trí có) B3 Duyệt lại danh sách allPos, với giá trị allPos ta tìm vị trí lân cận tới (hàm goTo()) Nếu có vị trí chưa có quân cờ trả false quân cờ chưa bị vây Nếu trả true quân cờ bị vây Các hàm sau tìm kiếm danh sách quân cờ bị vây sau nước đi: private ArrayList siege(boolean type, int pos) { ArrayList near = new ArrayList(); near.add(pos); addArrayList(near, nearPosition(type, pos)); ArrayList distint = new ArrayList(); while(!near.isEmpty()) { int p = near.get(0); near.remove(0); boolean skip = false; for(int i:distint) if(skip = (i == p)) break; if(skip) continue; distint.add(p); addArrayList(near, nearPosition(type, p)); } for(int ppos:distint) { int[] around = goTo(ppos); 29 boolean stop = false; for(int jpos:around) { Chessman ch = findChessman(jpos); if(stop = (ch == null)) break; } if(stop) return new ArrayList(); } return distint; } private ArrayList nearPosition(boolean type, int pos) { ArrayList near = new ArrayList(); int[] around = goTo(pos); for(int i = 0; i < around.length; i++) { Chessman ch = findChessman(around[i]); if(ch != null && ch.type == type) near.add(around[i]); } return near; } private void addArrayList(ArrayList a, ArrayList b) { for(int c:b) a.add(c); } 4.7.3 Xác định trạng thái thắng người chơi Sau quân cờ đánh ta kiểm tra số quân cờ người chơi bàn cờ người chơi có 16 quân cờ người dành chiến thắng Ngược lại không quân cờ bàn cờ người thua public boolean checkWin(boolean type) { for(Chessman ch:armies) if(ch.type != type) return false; return true; } CHƯƠNG TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ Triển khai 1.1 Môi trường phát triển ứng dụng: Ứng dụng phát triển Eclipse IDE for Java Developers Version: Neon.3 Release (4.6.3) 1.2 Cấu trúc chương trình Chương trình Server: 30 Hình Cấu trúc project Game Server Trong đó: + Package org.thanhan.game chứa lớp quản lý thủ tục xử lý liệu, số trạng thái, hàm main khởi chạy Server + Package socket.io chứa lớp quản lý thủ tục kết nối, gửi nhận liệu, interface quản lý kiện trước, sau kết nối Client với Server Đây package dùng chung cho chương trình Client Server nhắc phần Phân tích đề tài Chương trình Client: 31 Hình 10 Cấu trúc Cờ Gánh Client Trong đó: + Package application chứa các số trạng thái, hàm khởi chạy Client, hàm khởi tạo giao diện,… + Package application.controller chứa hàm kết nối, lắng nghe kiện từ Server, lắng nghe xử lý kiện gửi lên Server,… 32 + Package assets.images chứa hình ảnh phục vụ cho việc xây dựng giao diện + Package assets.layout chứa file giao diện nhắc phần Yêu cầu giao diện + Package assets.sounds chứa file âm phục vụ cho game + Package socket.io package dùng chung có thành phần chương trình Server Kết Hình 11 Giao diện đăng nhập 33 Hình 12 Giao diện đăng kí 34 Hình 13 Màn hình Hình 14 Giao diện bàn chơi 35 Hình 15 Giao diện chơi game Đánh giá kết Nhìn chung xây dựng thành công trò chơi cờ gánh cho phép nhiều người chơi Trò chơi đáp ứng yêu cầu đặt Nhưng nhiều thiếu sót cần bổ sung sau lưu lại trạng thái chiến thắng, bảng kết quả… KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Những kết đạt Nắm bắt vận dụng lớp Socket java để xây đựng game chơi qua mạng Biết chế truyền liệu thông qua mạng Xây dựn game cờ gánh chơi nhiều người qua mạng Những vấn đề tồn Trong trình chơi game phát sinh số lỗi không mong muốn, đôi lúc client chưa nhận liệu từ server nên trận đánh tiếp tục Hướng phát triển Khắc phục lỗi tồn Lưu trữ trình chơi sở liệu để xem sau KẾT LUẬN CHUNG Qua đồ án giúp em hoàn thiện kiến thức học trường biết cách vận dụng vào dự án thực tế Về em hoàn thành yêu cầu đề đồ án sở ngành mạng Xây dựng thành công chương trình hoạt động tốt Tuy nhiên, chương trình tồn thiếu sót hạn chế cần phải khắc phục 36 TÀI LIỆU THAM KHẢO YinYang's Blog , Win32 – Giới thiệu kĩ thuật Hook khái niệm MSDN, Hooks Overview Wikipeadia, Mạng máy tính Wikipedia, Cờ Gánh O7planning, Hướng dẫn lập trình Java Socket Oracle, Package java.net Introduction to JavaFX for Game Development JavaFX Event Handling Examples 37 PHỤ LỤC 38 ... vực mạng nay, việc nghiên cứu, nắm vững Mạng thực quan trọng người lập trình PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH TIÊU ĐỀ: Tìm hiêu kỹ thuật lập trình Hook Xây dựng ứng dụng gõ tắt Sử dụng ngôn ngữ lập. .. dụng nhiều chương trình lúc Bằng cách sử dụng DLL, chương trình mô-đun hoá thành nhiều phần riêng biệt Ví dụ: chương trình kế toán bán theo mô-đun Mỗi mô-đun nạp vào chương trình thời gian thực... triển mô-đun chương trình Điều giúp bạn phát triển chương trình lớn cần nhiều phiên ngôn ngữ chương trình yêu cầu kiến trúc module Ví dụ chương trình mô-đun chương trình kế toán có nhiều mô-đun

Ngày đăng: 29/05/2017, 15:54

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan