1. Trang chủ
  2. » Công Nghệ Thông Tin

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

43 405 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 1,41 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Một số ví dụ sử dụng hook: - Tạo các chức năng debug - Tạo các chương trình record và play back macro - Bắt giả lập các sự kiện bàn phím và chuột - Tạo chức năng HelpF1 cho ứng dụng - Tạ

Trang 1

MỤC LỤC

DANH SÁCH HÌNH VẼ iv

DANH SÁCH BẢNG BIỂU v

LỜI MỞ ĐẦU 1

PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH 2

TIÊU ĐỀ: 2

CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 2

1 Giới thiệu Hook 2

2 Cơ chế của Hook – Hook chain 2

3 Các loại Hook 3

4 Hook Procedure 3

5 Cài đặt hook 4

5.1 Cài đặt một Filter Function vào chuỗi các Filter Function của một hook 4

5.2 Gỡ bỏ một Filter Function ra khỏi chuỗi các Filter Function của một hook 7

5.3 Gọi Filter Function kế tiếp trong chuỗi các Filter Function 7

6 Thư viện liên kết động DLL 8

6.1 Khái niệm 8

6.2 Cách thức hoạt động 8

6.3 Các loại liên kết động 9

6.4 Tại sao sử dụng DLL 9

CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 10

1 Yêu cầu chức năng 10

2 Yêu cầu giao diện 10

3 Thuật toán 10

4 Cơ sở dữ liệu 10

CHƯƠNG 3 TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ 11

1 Triển khai 11

1.1 Môi trường triển khai 11

1.2 Cấu trúc project 11

2 Kết quả 12

3 Đánh giá kết quả 13

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 13

1 Những kết quả đạt được 13

2 Những vấn đề còn tồn tại 13

3 Hướng phát triển 14

PHẦN 2: LẬP TRÌNH MẠNG 15

TIÊU ĐỀ: 15

Trang 2

ii

CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 15

1 Socket 15

1.1 Khái niệm và các đặc tính cơ bản 15

1.2 Các constructor 15

1.3 Hàm lấy thông tin Socket 16

1.4 Lớp ServerSocket 16

2 Mô hình Client – Server 17

2.1 Khái niệm và đặc tính cơ bản 17

2.2 Cách thức hoạt động 18

2.3 Các kiến trúc Client – Server 18

CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 20

1 Cờ gánh 20

1.1 Giới thiệu 20

1.2 Cách chơi 21

2 Phân tích yêu cầu 22

2.1 Yêu cầu chức năng 22

2.2 Yêu cầu giao diện 22

3 Thiết kế hệ thống 22

4 Xây dựng chương trình 23

4.1 Package socket.io 23

4.2 Đóng gói dữ liệu 23

4.3 Xử lý dữ liệu sau khi nhận được 25

4.4 Giá trị điều khiển 25

4.5 Phòng chơi 26

4.6 Bàn cờ và quân cờ 26

4.7 Thuật toán 26

CHƯƠNG 3 TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ 30

1 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

2 Kết quả 33

3 Đánh giá kết quả 36

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 36

1 Những kết quả đạt được 36

2 Những vấn đề còn tồn tại 36

3 Hướng phát triển 36

KẾT LUẬN CHUNG 36

Trang 3

TÀI LIỆU THAM KHẢO 37 PHỤ LỤC 38

Trang 4

iv

DANH SÁCH HÌNH VẼ

Hình 1 Hook chain 3

Hình 2 Cấu trúc table word 11

Hình 3 Cấu trúc project ứng dụng gõ tắt 12

Hình 4 Giao diện ứng dụng gõ tắt 13

Hình 5 Mô hình client - server 2 tầng 19

Hình 6 Mô hình client - server 3 tầng 20

Hình 7 Cờ gánh 21

Hình 8 Định dạng dữ liệu 24

Hình 9 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 chính 35

Hình 14 Giao diện bàn chơi 35

Hình 15 Giao diện chơi game 36

Trang 5

DANH SÁCH BẢNG BIỂU

Bảng 1 Các loại hook và tầm ảnh hưởng 6

Trang 6

Cũng như vậy, với sự phát triển trong lĩnh vực mạng hiện nay, thì việc nghiên cứu, nắm vững về Mạng là thực sự quan trọng đối với người lập trình

Trang 7

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 1 CƠ SỞ LÝ THUYẾT

1 Giới thiệu Hook

Trong Windows, khi chúng ta thực hiện các thao tác nhấp chuột, nhấn phím…thì hệ điều hành sẽ chuyển các sự kiện này thành các thông điệp (message) rồi đưa vào hàng đợi (queue) của hệ thống Sau đó, các thông điệp được trao lại cho từng ứng dụng cụ thể để xử lý

Hook là một cơ chế mà một ứng dụng có thể chặn các sự kiện, như các thông điệp, thao tác chuột, bàn phím Hàm dùng để chặn một loại sự kiện riêng biệt được gọi là hook procedure/ hook function Mỗi khi nhận được sự kiện, hook procedure

có thể thay đổi và thậm chí hủy bỏ các sự kiện đó

Xét ở phạm vi hoạt động thì có 2 loại Hook:

- Local hook (thread hook): chỉ có ảnh hưởng trong phạm vi một thread

- Global hook: có ảnh hưởng trong toàn hệ thống Trường hợp này, hookprocedure phải được chứa trong một thư viện DLL

Một số ví dụ sử dụng hook:

- Tạo các chức năng debug

- Tạo các chương trình record và play back macro

- Bắt giả lập các sự kiện bàn phím và chuột

- Tạo chức năng Help(F1) cho ứng dụng

- Tạo các ứng dụng computer-based training (CBT)

2 Cơ chế của Hook – Hook chain

Hệ điều hành luôn duy trì một danh sách các hook procedure cho mỗi loại sựkiện Mỗi danh sách các Hook procedure này được gọi là hook chain Bản chất của hook chain là một dãy các con trỏ hàm trỏ đến các Hook procedure

Khi hệ thống thực một sự kiện nào đó, nó sẽ tìm kiếm trong hook chain tương ứng với sự kiện đó Nếu một hook procedure phù hợp được tìm thấy, hệ thống sẽ thực hiện nó và chỉ lấy lại quyền điều khiển sau khi hook chain kết thúc Vì thế khi một hook procedure thực hiện xong, nó phải thực hiện việc chuyển quyền điều khiển cho hook procedure kế tiếp trong hook chain

Tuy nhiên cơ chế này còn tùy thuộc vào loại hook Như một số loại hook chỉ

có thể theo dõi các thông điệp, vì vậy cho dù hook procedure có chuyển quyền điều khiển cho hook procedure kế tiếp hay không, hệ thống vẫn sẽ tự động làm việc này

Trang 8

Hook là một kỹ thuật xử lý thông điệp rất mạnh cho phép chúng ta can thiệp sâu vào các tiến trình khác nhau, nhưng nó làm ảnh hưởng tới tốc độ của hệ thống, nhất là hook system-wide, vì tất cả các sự kiện của hệ thống sẽ được định hướng tới một hàm nào đó, rõ ràng điều này làm hệ thống chậm đi đáng kể Vì thế ta chỉ hên hook những thông điệp thật cần thiết và kết thúc việc hook ngay khi không dùng đến nữa

Hình 1 Hook chain

3 Các loại Hook

Có nhiều loại hook được phân biệt dựa vào các sự kiện, thông điệp mà Hookprocedure can thiệp vào Danh sách dưới đây liệt kê các loại hook kèm với link dẫn đến tham khảo từ MSDN:

Trang 9

Hook procedure là một loại callback function Hệ thống sẽ gọi các hàm này khi các sự kiện, thông điệp tương ứng với loại hook Mỗi loại hook có một hook procedure khác nhau nhưng đều có cùng tham số như cú pháp bên dưới Với mỗi hook procedure khác nhau thì việc xét các giá trị tham số cũng khác nhau

Lập trình viên sử dụng dụng hàm SetWindowsHookEx để cài đặt một hook procedures vào hook chain

Một hook procedures có cú pháp như sau:

LRESULT CALLBACK HookProc(

Ý nghĩa tham số truyền vào trong hàm:

- nCode : tham số này thường được gọi là “hook code”, Hook procedure sửdụng giá trị này để quyết định cách thức xử lý đối với sự kiện Giá trị của hook code tùy thuộc vào từng loại hook cụ thể, và mỗi loại hook sẽ có tập hợp những giá trị hook code đặc trưng của riêng mình

Có một quy luật mà dường như các Hook procedure của mọi loại hook cần tuân thủ: khi Window truyền cho hàm giá trị hook code âm, Hook procedure không được xử lý sự kiện mà phải gọi hàm CallNextHookEx với chính những tham số

mà hệ điều hành truyền cho nó Sau đó, nó phải trả về giá trị được trả về bởi hàm CallNextHookEx

- wParam, lParam: Đây là những thông tin cần thiết cho Hook proceduretrong quá trình xử lý sự kiện Các giá trị này sẽ có ý nghĩa khác nhau tuỳ thuộc vào từng loại hook

Ví dụ: Hook procedure gắn với hook WH_KEYBOARD sẽ nhận mã phím ảo (Virtual-Key Code) từ wParam, đồng thời có được từ lParam thông tin mô tả trạng thái của bàn phím khi sự kiện gõ phím xảy ra

5 Cài đặt hook

5.1 Cài đặt một Filter Function vào chuỗi các Filter Function của một hook

Trang 10

Tác vụ này được thực hiện 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ố này có thể là một

trong các giá trị sau:

• WH_CALLWNDPROC : đặt một thủ tục hook quản lý các thông điệp trướclúc hệ thống gởi chúng tới cửa sổ đích

• WH_CALLWNDPROCRET : đặt một thủ tục hook quản lý các thông điệpsau khi chúng được xử lý bởi thủ tục cửa sổ đích

• WH_CBT : đặt một thủ tục hook nhận những thông báo có ích tới ứng dụnghuấn luyện trên cơ sở tính toán (CBT)

• WH_DEBUG : đặt một thủ tục hook có ích cho việc debug những thủ tụchook khác

• WH_FOREGROUNDIDLE : đặt một thủ tục hook sẽ được gọi khi threadforeground của ứng dụng sẽ trở thành không dùng đến Hook này có ích cho hoạt động những nhiệm vụ (task) độ ưu tiên thấp trong thời gian không được dùng đến

• WH_GETMESSAGE : đặt một thủ tục hook quản lý các thông điệp được posttới hàng đợi thông điệp

•WH_JOURNALPLAYBACK : đặt một thủ tục hook post những thông điệpđược ghi trước đó bởi thủ tục hook WH_JOURNALRECORD

•WH_JOURNALRECORD : đặt một thủ tục hook ghi những thông điệp đầuvào được post tới hàng thông điệp hệ thống Hook này có ích cho việc ghi các macro

• WH_KEYBOARD : đặt một thủ tục hook quản lý các thông điệp keystroke

• WH_MOUSE : đặt một thủ tục hook quản lý các thông điệp chuột

• WH_MSGFILTER: đặt một thủ tục hook quản lý các thông điệp được kết sinhnhư là một kết quả cuả sự kiện đầu vào ở trong dialog box, message box, menu hay scroll bar

• WH_SYSMSGFILTER : đặt một ứng dụng các thông điệp được kết sinh như

là kết quả của một sự kiện đầu vào ở trong dialog box, message box, menu hay scroll bar Thủ tục hook quản lý những thông điệp này cho tất cả các ứng dụng trong hệ thống

Trang 11

Mỗi giá trị trên xác định một loại hook mà ta muốn cài đặt, mỗi loại hook có một ý nghĩa và tình huống sử dụng khác nhau

- lpfn: Địa chỉ của Hook procedure mà ta muốn gắn với hook

- hMod: Handle của module chứa hook procedure Nếu ta cài đặt một hook cục

bộ (nghĩa là sự thực thi của hook procedure chỉ ảnh hưởng đối với tiến trình cài đặt hook), tham số này phải là NULL Còn nếu chúng ta muốn có một hook với phạm vi toàn hệ thống (tức là mọi tiến trình đang hiện hữu đều chịu ảnh hưởng bởi hook procedure của chúng ta), tham số này sẽ là Handle của DLL chứa hook procedure

- dwThreadID: Định danh của thread ứng với hook đang được cài đặt Nếu

tham số này là một số khác 0, hook procedure được gắn với hook chỉ được gọi trong ngữ cảnh của một thread xác định Còn nếu dwThreadID = 0, hook procedure sẽ có phạm vi toàn hệ thống, và dĩ nhiên, nó sẽ được gọi trong ngữ cảnh của bất kỳ thread nào đang tồn tại trên HĐH Có thể sử dụng hàm GetCurrentThreadId để lấy được handle của thread muốn cài đặt hook

Một hook có thể được sử dụng ở mức hệ thống, ở mức cục bộ, hoặc ở cả hai mức vừa nêu Bảng sau mô tả các loại hook cùng tầm ảnh hưởng của nó:

Bảng 1 Các loại hook và tầm ảnh hưởng

WH_CALLWNDPROC 4 Thread or global CallWndProc

WH_CALLWNDPROCRET 12 Thread or global CallWndRetProc

WH_FOREGROUNDIDLE 11 Thread or global ForegroundileProc

WH_GETMESSAGE 3 Thread or global GetMsgProc

WH_JOURNALPLAYBACK 1 Global only JournalPlayBackProc

WH_JOURNALRECORD 0 Global only JournalRecordProc

WH_KEYBOARD 2 Thread or global KeyboardProc

WH_KEYBOARD_LL 13 Global only LowLevelKeyboardProc

WH_MSGFILTER -1 Thread or global MessageProc

Trang 12

7

Với một loại hook xác định, hook cục bộ sẽ được gọi trước, sau đó là hook toàn cục

Giá trị trả về:

Handle của hook nếu thành công, ngược lại trả về NULL Giá trị này cần thiết

để sử dụng hàm UnhookWindowsHookEx Trong trường hợp này bạn có thể dùng hàm GetLastErrorđể lấy thông tin lỗi

5.2 Gỡ bỏ một Filter Function ra khỏi chuỗi các Filter Function của một hook

Windows cung cấp hàm UnhookWindowsHookEx giúp chúng ta thực hiện việc này Khai báo của nó như sau:

BOOL WINAPI UnhookWindowsHookEx(

_In_ HHOOK hhk

);

Tham số: hhook chỉ ra hàm hook được dỡ bỏ Đây là giá trị được trả vể bởi hàm SetWindowsHookEx khi hàm Hook được cài đặt

Nếu thực hiện thành công hàm trả về giá trị true, ngược lại

Chú ý : Hàm UnhookWindowsHookEx phải được sử dụng trong sự kết hợp với hàm SetWindowsHookEx

5.3 Gọi Filter Function kế tiếp trong chuỗi các Filter Function

Khi một hook được cài đặt, Windows gọi hàm đầu tiên trong chuỗi các hook procedure, và kể từ thời điểm này, trách nhiệm Windows không còn nữa Hook procedure hiện hành phải đảm bảo với hệ thống là có được lời gọi đến hàm kế tiếp trong chuỗi các hook procedure Bởi lẽ, có thể có một ứng dụng khác cũng cài đặt cùng loại hook để thi hành một số tác vụ nào đó, và nếu như ta không cho hook procedure của ứng dụng này tham gia xử lý sự kiện, sẽ có vấn đề rắc rối xảy ra Vấn đề sẽ càng trở nên nghiêm trọng nếu ứng dụng này là một chương trình thuộc

hệ thống, và rõ ràng sẽ không có gì đảm bảo cho sự an toàn của hệ thống chúng

ta Để giải quyết vấn đề trên, hãy sử dụng hàm CallNextHookEx

Cú pháp:

LRESULT WINAPI CallNextHookEx(

_In_opt_ HHOOK hhk,

_In_ int nCode,

_In_ WPARAM wParam,

_In_ LPARAM lParam

);

Tham số:

Trang 13

- hhk : là handle của hook hiện hành, giá trị này có thể lấy được từ hàm SetWindowsHookEx khi cài đặt hook

- nCode : chỉ định hook code để gởi đến hook kế tiếp Hàm xử lý hook dùng giá trị này để chỉ định xử lý thông điệp được gởi từ hook như thế nào

- wParam: chỉ định 16 bits thông tin mở rộng của thông điệp

- lParam: chỉ định 32 bits thông tin mở rộng của thông điệp

Giá trị trả về: giá trị trả về là kết quả của quá trình xử lý và tùy thuộc vào thông

số nCode

Trong một số tình huống, hook procedure hiện hành có thể không muốn chuyển

sự kiện cho hook procedure khác trong cùng một chuỗi Lúc này, nếu loại hook chúng ta đang cài đặt cho phép huỷ bỏ sự kiện, và hook procedure của chúng ta cũng có cùng quyết định là hủy bỏ, nó sẽ không phải gọi hàm CallNextHookEx

6 Thư viện liên kết động DLL

6.1 Khái niệm

DLL là viết tắt của Dynamic Link Library – Thư viện liên kết động Một DLL

là một thư viện mã và dữ liệu có thể được sử dụng bởi nhiều chương trình cùng một lúc

Bằng cách sử dụng một DLL, chương trình có thể được mô-đun hoá thành nhiều phần riêng biệt Ví dụ: một chương trình kế toán có thể được bán theo mô-đun Mỗi mô-đun có thể được nạp vào chương trình chính ở thời gian thực nếu mô-đun

đó được cài đặt Vì các mô-đun riêng biệt, thời gian tải của chương trình là nhanh hơn và mô-đun được chỉ được nạp khi chức năng đó được yêu cầu

Ngoài ra, bản cập nhật, sửa lỗi sẽ dễ dàng hơn khi áp dụng cho mỗi mô-đun mà không ảnh hưởng đến các phần của chương trình Ví dụ: có một chương trình bảng lương và mức thuế thay đổi hàng năm Khi muốn thay đổi một DLL, có thể áp dụng bản cập nhật mà không cần phải xây dựng hoặc cài đặt lại toàn bộ chương trình

6.2 Cách thức hoạt động

Giả sử có 2 tập tin riêng biệt là "example.exe" - tập tin thực thi thông thường,

và "library.dll" – tập tin DLL được sử dụng để thực thi

Khi tập tin "example.exe" chạy, hệ điều hành sẽ tải tập tin, tìm bảng dữ liệu bên trong tập tin và cung cấp thông tin "This program uses the following list of functions from the DLL file library.dll" (chương trình này sử dụng danh sách các chức năng dưới đây từ file DLL library.dll)

Sau đó, các loader code sẽ tìm kiếm "library.dll", và nếu nó tìm thấy"library.dll" thì các tập tin sẽ được tải

Trang 14

9

Bên trong tập tin DLL này có chứa một danh sách khác gọi là "export list", danh sách này kết nối các địa chỉ cụ thể cho từng chức năng nằm bên trong tập tin DLL Kể từ thời điểm này, khi "example.exe" cần gọi một hàm từ "library.dll",

"example.exe" chỉ cần sử dụng địa chỉ đó

6.3 Các loại liên kết động

- Liên kết không tường minh (Implicit Linking): Liên kết không tường minh hay liên kết ở thời điểm nạp (Load-time dynamic Linking) diễn ra ở thời điểm biên dịch, khi ứng dụng tạo một tham chiếu tới hàm DLL được export Tại thời điểm mã nguồn của lời gọi đó được biên dịch, lời gọi hàm DLL dịch thành một hàm tham chiếu ngoài trong đối tượng mã Để hiểu được tham chiếu ngoài này, ứng dụng phải liên kết với thư viện import (file có phần mở rộng là.LIB) đã được DLL tạo ra khi biên dịch

- Liên kết tường minh (Explicit Linking): Liên kết tường minh hay còn gọi

là liên kết ở thời điểm chạy (Run-time Dynamic Linking): sử dụng các con trỏ hàm ở thời điểm chạy chương trình để trỏ tới các hàm trong DLL mà ta cần sử dụng Modul sẽ dùng hàm LoadLibrary hoặc hàm LoadLibraryEx

để nạp DLL khi nào nó muốn sử dụng hàm trong DLL Sau khi DLL đã được nạp, modul sử dụng hàm GetProcAddress để lấy về địa chỉ trỏ tới hàm xuất ra trong DLL và đưa vào một con trỏ hàm nào đó Các thao tác tiếp theo của modul sẽ làm việc với con trỏ hàm

6.4 Tại sao sử dụng DLL

- Sử dụng ít tài nguyên

Khi nhiều chương trình sử dụng cùng một thư viện hàm, một DLL có thể giảm sao chép mã được tải vào đĩa và bộ nhớ vật lý Điều này có thể ảnh hưởng đáng kể hiệu suất của không chỉ chương trình đang chạy trên nền còn các chương trình khác đang chạy trên hệ điều hành Windows

- Khuyến khích kiến trúc mô-đun

Một DLL giúp khuyến khích phát triển các mô-đun chương trình Điều này giúp bạn phát triển chương trình lớn cần nhiều phiên bản ngôn ngữ hoặc chương trình yêu cầu kiến trúc module Ví dụ về một chương trình mô-đun

là một chương trình kế toán có nhiều mô-đun có thể được tự động tải tại thời gian chạy

- Cài đặt và triển khai dễ dàng hơn

Khi chức năng trong một DLL cần bản Cập Nhật hoặc bản vá, triển khai và cài đặt các tệp DLL không yêu cầu chương trình relinked với DLL Ngoài

ra, nếu nhiều chương trình sử dụng cùng một DLL, nhiều chương trình sẽ lợi ích tất cả bản Cập Nhật hoặc sửa chữa Vấn đề này thường xuyên hơn

Trang 15

có thể xảy ra khi bạn sử dụng một DLL bên thứ ba được thường xuyên cập nhật hoặc khắc phục

CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ HỆ THỐNG

1 Yêu cầu chức năng

Chương trình được thiết kế để thay thế một số kí tự ngắn thành các cụm từ quen thuộc được lưu trữ trong cơ sơ sở dữ liệu Nhằm mục đích tăng tốc độ gõ cho người sử dụng

Một số yêu cầu của chương trình:

- Lưu trữ các cụm từ viết tắt trong cơ sỡ dữ liệu

- Thay thế các từ viết tắt thành cụm từ đo người dùng định nghĩa

2 Yêu cầu giao diện

Xây dựng giao diện cho người dùng nhập, chỉnh sửa, xóa và xem các từ viết tắt

đã định nghĩa Có các nút nhấn để chạy và dừng chương trình

3 Thuật toán

B1 Khởi tạo 1 chuỗi text lưu trữ chuỗi kí tự từ người dùng nhập

B2 Cài đặt hook procedure bắt các sự kiện thay đổi cửa sổ người dùng

Nếu có sự thay đổi cửa sổ thì xóa trống chuỗi text

B3 Cài đặt một hook procedure bắt tất cả các sự kiện bàn phím của người dùng

Với mỗi phím được nhấn và nhả kiểm tra kí tự vừa nhập nếu phù hợp thì thêm vào chuỗi text

B4 Nếu người dùng nhấn SPACE_BAR tìm chuỗi text trong csdl

- Xóa trống chuỗi text

Nếu không tồn tại:

- Xóa trống chuỗi text

4 Cơ sở dữ liệu

Chương trình sử dụng sqlite để lưu trữ các kí tự ví tắt

Các từ viết tắt và nghĩa của nó được lưu trữ trong table word

Trang 16

11

Hình 2 Cấu trúc table word

CHƯƠNG 3 TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ

1 Triển khai

1.1 Môi trường triển khai

Ứng dụng được phát triển trên

Microsoft Visual Studio Community2015 Version 14.0.25431.01 Microsoft NET Framework Version 4.7.02046

Sử dụng thư viện sqlite 1.0.105.1

1.2 Cấu trúc project

Trang 17

Hình 3 Cấu trúc project ứng dụng gõ tắt

2 Kết quả

Trang 18

Tuy nhiên, ứng dụng vẫn còn một vài nhược điểm, cụ thể là không xác định được kí tự viết tắt khi người dùng sao chép và xóa một đoạn hay khi chuyển đổi cửa sổ một thời gian

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Trang 19

Chưa thay thế được cụm từ viết tắt khi người dùng thao tác copy và xóa một đoạn văn bản hay khi người dùng gõ một phần kí tự sau đó chuyển đổi cửa sổ rồi quay lại

Chương trình hoạt động không được tốt khi chạy cùng một số phần mềm sử dụng kĩ thuật hook phím ví dụ: Unikey

3 Hướng phát triển

Khắc phục những vấn đề còn tồn đọng khi trong chương trình

Có thể xây dụng chức năng nhắc từ khi gõ như plugin autocomplete của một

số trình soạn thảo văn bản

Trang 20

1.1 Khái niệm và các đặc tính cơ bản

Socket là một model của Java, dùng để tạo ra các giao tiếp giữa các máy tính với nhau Nó là điểm giao tiếp (endpoint) khi thực hiện quá trình liên kết truyền nhận dữ liệu

Socket có thể có 2 luồng: một luồng dữ liệu vào (input stream), và 1 luồng dữ liệu ra (output stream) Máy này gửi dữ liệu cho máy khác thông qua đường mạng, tạo một output stream đính kèm với socket, và máy tính nhận thì cần input stream với socket của nó để nhận dữ liệu

Lớp Socket của Java được sử dụng cả client và server

Một socket có thể thực hiện bảy thao tác cơ bản:

- Kết nối với một máy ở xa (để gửi và nhận dữ liệu)

- Chấp nhận liên kết từ các máy ở xa trên cổng được gán

Có các phương thức tương ứng với bốn thao tác đầu tiên

Ba thao tác cuối chỉ cần cho server để chờ các client liên kết với chúng

Các thao tác này được cài đặt bởi lớp ServerSocket

public Socket(InetAddress host, int port) throws IOException

Constructor này tạo một socket TCP với thông tin là địa chỉ của một host được xác định bởi một đối tượng InetAddres và số hiệu cổng port, sau đó nó thực hiện kết nối tới host

Trang 21

Constructor đưa ra ngoại lệ trong trường hợp không kết nối được tới host

public Socket (String host, int port, InetAddress interface, int localPort) throws IOException, UnknownHostException

Constructor này tạo ra một socket với thông tin là địa chỉ IP được biểu diễn bởi một đối tượng String và một số hiệu cổng và thực hiện kết nối tới host đó Socket kết nối tới host ở xa thông qua một giao tiếp mạng và số hiệu cổng cục

bộ

Nếu localPort bằng 0 thì Java sẽ lựa chọn một cổng ngẫu nhiên có sẵn nằm trong khoảng từ 1024 đến 65535

public Socket (InetAddress host, int port, InetAddress interface, int

localPort) throws IOException, UnknownHostException

Constructor này chỉ khác constructor trên ở chỗ địa chỉ của host lúc này được biểu diễn bởi một đối tượng InetAddress

1.3 Hàm lấy thông tin Socket

public InetAddress getInetAddress(): Cho ta biết host ở xa mà Socket kết nối

tới, hoặc liên kết đã bị ngắt thì nó cho biết host ở xa mà Socket đã kết nối tới

public int getPort(): Cho biết số hiệu cổng mà Socket kết nối tới trên host ở xa public int getLocalPort(): Tìm ra số hiệu cổng ở phía host cục bộ (thông thường

một liên kết có hai đầu: host ở xa và host cục bộ)

public InetAddress getLocalAddress(): Cho biết giao tiếp mạng nào mà một

socket gắn kết với nó

public InputStream getInputStream() throws IOException: Trả về một luồng

nhập để đọc dữ liệu từ một socket vào chương trình

public OutputStream getOutputStream() throws IOException: Trả về một

luồng xuất để ghi dữ liệu từ ứng dụng ra đầu cuối của một socket

public void close() throws IOException: Các socket được đóng một cách tự

động khi một trong hai luồng đóng lại, hoặc khi chương trình kết thúc, hoặc khi socket được thu hồi

1.4 Lớp ServerSocket

Lớp SeverSocket thì được sử dụng để đại diện cho Sever trong việc giao tiếp giữa chương trình client với chương trình server ServerSocket có 1 ràng buộc cụ thể bởi 1 cổng nào đó và nó có thể truy cập từ Client Nếu cổng này được sử dụng bởi một ứng dụng khác thì nó sẻ ném ra một exception

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

TỪ KHÓA LIÊN QUAN

w