Báo cáo đồ án cơ sở ngành mạng đề tài nguyên lý hệ điều hành tìm hiểu cơ chế điều khiển chuột xây dựng ứng dụng tự động xử lý chuột lập trình mạng xây dựng trò chơi vẽ hình đoán chữ online Báo cáo đồ án cơ sở ngành mạng đề tài nguyên lý hệ điều hành tìm hiểu cơ chế điều khiển chuột xây dựng ứng dụng tự động xử lý chuột lập trình mạng xây dựng trò chơi vẽ hình đoán chữ online
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
Trang 2MỤC LỤC
MỞ ĐẦU 1
PHẦN I: NGUYÊN LÝ HỆ ĐIỀU HÀNH 2
TIÊU ĐỀ: TÌM HIỂU CƠ CHẾ ĐIỀU KHIỂN CHUỘT XÂY DỰNG ỨNG DỤNG TỰ ĐỘNG XỬ LÝ CHUỘT 2
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 2
1 Windows Messages và Message queues 2
2 Hook 4
3 SendInput 5
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 6
1 Phát biểu bài toán 6
2 Các chức năng 6
3 Các luồng dữ liệu 7
4 Thiết kế chương trình 7
CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 10
1 Triển khai 10
2 Demo 10
3 Đánh giá kết quả 12
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 13
1 Kết luận 13
2 Hướng phát triển 13
PHẦN II: LẬP TRÌNH MẠNG 14
TIÊU ĐỀ: XÂY DỰNG TRÒ CHƠI VẼ HÌNH ĐOÁN TỪ ONLINE 14
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 14
1 TCP/IP 14
2 Mô hình Client-Server 14
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 15
1 Phát biểu bài toán 15
Trang 33 Thiết kế chương trình 16
CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 19
1 Triển khai 19
2 Demo client 19
3 Đánh giá kết quả 21
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 23
1 Kết luận 23
2 Hướng phát triển 23
TÀI LIỆU THAM KHẢO 24
PHỤ LỤC 25
1 Mã nguồn 25
Trang 4DANH SÁCH HÌNH ẢNH
Hình 1 Sơ đồ luồng dữ liệu của ứng dụng điều khiển chuột 7
Hình 2 Sơ đồ thuật toán của ứng dụng điều khiển chuột 8
Hình 3 Demo giao diện chính điều khiển chuột 10
Hình 4 Giao diện ghi lịch sử 11
Hình 5 File được tạo 11
Hình 6 Giao diện phát lại 11
Hình 7 Sơ đồ thuật toán trò chơi 17
Hình 8 Giao diện đăng nhập 19
Hình 9 Giao diện chính 20
Hình 10 Giao diện chờ chọn từ 20
Hình 11 Giao diện người đoán 21
Hình 12 Giao diện người vẽ 21
Trang 6MỞ ĐẦU
1 Tổng quan về đề tài
Internet đang ngày càng phát triển và được sử dụng trong rất nhiều trong nhiềulĩnh vực của đời sống hiện nay Đối với một sinh viên công nghệ thông tin, học vàthực hành áp dụng internet nói chung và lập trình mạng nói riêng là một phần khôngthể thiếu Do vậy, đồ án cơ sở ngành mạng là một cơ hội cho sinh viên có thể ápdụng những kiến thức lập trình mạng đã học để giải quyết các bài toán Đồ án cũnggiúp sinh viên củng cố lại kiến thức nguyên lý hệ điều hành đã học
Trong khuôn khổ đồ án, dưới sự hướng dẫn của thầy Nguyễn Tấn Khôi, giảngviên khoa Công nghệ thông tin, Trường Đại học Bách khoa – Đại học Đà Nẵng, em
đã nghiên cứu, tìm hiểu và thực hiện hai đề tài “Tìm hiểu cơ chế điều khiển chuột.Xây dựng ứng dụng tự động xử lý chuột” cho phần Nguyên lý hệ điều hành và đề
tài “Xây dựng trò chơi vẽ hình đoán chữ online.” cho phần Lập trình mạng.
Do thời gian và kiến thức của em còn hạn chế nên không tránh khỏi những saisót nhất định trong quá trình thực hiện đồ án Xin cảm ơn sự hỗ trợ từ thầy NguyễnTấn Khôi và rất mong nhận được sự góp ý từ quý thầy cô
2 Bố cục của đồ án
Đồ án bao gồm 2 phần, mỗi phần bao gồm các nội dung sau:
Chương 1: trình bày cơ sở lý thuyết
Chương 2: trình bày quá trình phân tích và thiết kế hệ thống, thiết kế chương trình
Chương 3: trình bày kết quả thực thi chương trình, đánh giá kết quả và hướng phát triển
Trang 7PHẦN I: NGUYÊN LÝ HỆ ĐIỀU HÀNH
TIÊU ĐỀ: TÌM HIỂU CƠ CHẾ ĐIỀU KHIỂN CHUỘT XÂY DỰNG ỨNG DỤNG TỰ ĐỘNG XỬ LÝ CHUỘT.
1 Windows Messages và Message queues
1.1 Messages
Các ứng dụng chạy trên windows hoạt động theo hướng sự kiện Tức là, chúng không nhận input từ việc gọi đích danh các hàm để lấy mà thay vào đó là đợi cho hệthống truyền input đến
Hệ thống truyền mọi input cho một ứng dụng tới nhiều cửa sổ của ứng dụng đó Mỗi ứng dụng sẽ có một hàm được gọi là window procedure (thủ tục của cửa sổ)
mà hệ thống sẽ gọi đến mỗi khi có bất kỳ input nào cho cửa sổ đấy
Hệ thống sẽ truyền input đến các window procedure dưới dạng các message (thông điệp) Message có thể được tạo bởi hệ thống hoặc các ứng dụng Hệ thống sẽtạo ra một message cho mỗi sự kiện input, ví dụ như khi người dùng gõ một phím trên bàn phím, di chuyển chuột,… Hệ thống cũng tạo ra message cho các thay đổi trong hệ thống do một ứng dụng nào đó gây ra, ví dụ như khi một ứng dụng thay đổitài nguyên font chữ của hệ thống Một ứng dụng cũng có thể tạo ra message để điều khiển các cửa sổ của chính nó hoặc tương tác với ứng dụng khác
để đợi xử lý Hệ thống sau đó sẽ lấy từng message ra, xem xét để tìm ra cửa sổ cần
Trang 8gửi đến và sau đó gửi message đến thread phụ trách cửa sổ đó Thread này sẽ xóa message ra khỏi hàng đợi của nó và thông báo đến hệ thống để gửi chúng đến window procedure phù hợp cho việc xử lý.
Hầu hết các message còn lại sẽ gửi trực tiếp đến window procedure và được gọi
là nonqueued message Những message này sẽ được gửi trực tiếp đến window procedure đích mà không cần đi qua message queue hay thread message queue
1.3 Message handling
Một ứng dụng thường phải xóa và xử lý message được gửi vào message queue
của các thread của nó Một ứng dụng đơn luồng thường sử dụng message loop
(vòng lặp message) trong hàm WinMain của nó và gửi các message đến các
window procedure để xử lý Ứng dụng với nhiều thread có thể chứa message loop trong mỗi thread tạo ra các cửa sổ
Trang 9Một message loop của một thread phải chứa TranslateMesssage nếu thread đó sửdụng để nhận ký tự từ bàn phím Hệ thống tạo ra các message phím ảo mỗi khi người dùng nhấn một phím Các message đó chứa mã phím ảo để phân biệt phím nào được bấm nhưng không chứa ký tự nào được bấm TranslateMesssage được dùng để chuyển đổi message phím ảo thành các message ký tự và đặt chúng vào lại message queue.
DispatchMessage sẽ gửi một message đến window procedure tương ứng dựa vàothông tin trong MSG
Trang 10Do đó, Hook có thể được sử dụng để theo dõi hành vi của người dùng bằng việc bắt các message như phím nhấn hay nhấp chuột Hook có thể theo dõi các thông
điệp của một thread nhất định (thread-specific hook) hoặc tất cả các thread trong hệ thống (global hook).
Bằng việc sử dụng global hook để theo dõi message của chuột, chúng ta có thể
biết được lịch sử sử dụng chuột của người dùng Từ đó, chúng ta có thể lưu lại lịch
sử đó vào file và sử dụng dữ liệu từ file đã lưu để điều khiển chuột giống như những
gì người dùng đã thực hiện
3 SendInput
SendInput là một trong những hàm của WinAPI SendInput có tác dụng dùng để giả lập hành động nhấn chuột hoặc nhấn phím của người dùng SendInput sẽ tạo ra
và chèn những sự kiện chuột hay bàn phím vào message queue của hệ thống tương
tự như cách mà windows nhận được từ chuột hay bàn phím vật lý Nói một cách đơn giản, sử dụng SendInput sẽ cho chúng ta khả năng điều khiển chuột trên máy tính
Trang 11CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
1 Phát biểu bài toán
Khi sử dụng máy tính hàng ngày, đôi lúc chúng ta sẽ phải lặp đi lặp lại một chuỗi những thao tác chuột giống nhau Những việc lặp lại này dễ khiến chúng ta mệt mỏi và chán nản Thời gian là vàng bạc Nếu chúng ta có thể tự động hóa quá trình lặp đi lặp lại này, chúng ta có thể được sử dụng thời gian đó cho những việc khác có ích hơn
Đề tài này được lập ra để giải quyết vấn đề trên Bằng việc ghi lại lịch sử sử dụng chuột và thực hiện lại theo những gì đã ghi, máy tính sẽ tự động điều khiển chuột cho chúng ta và chúng ta chỉ cần theo dõi máy tính thực hiện hoặc làm những việc khác mà không cần đến máy tính khi nó thực hiện nhiệm vụ của nó
2 Các chức năng
2.1 Lưu lịch sử hành vi sử dụng chuột của người dùng vào file
Khi người dùng chọn bắt đầu ghi lịch sử và chọn vị trí lưu file lịch sử, chương
trình sẽ tiến hành theo dõi hành vi sử dụng chuột của người dùng theo thời gian thực Tất cả những hành vi thu được trong quá trình theo dõi sẽ được ghi vào file ở
vị trí mà người dùng đã chọn Sau khi chọn ngừng ghi lịch sử, quá trình ghi lại sẽ
được kết thúc và ngừng theo dõi hành vi của người dùng
2.2 Tự động điều khiển chuột dựa vào file lịch sử đã ghi.
Từ những file đã lưu ở trên, khi người dùng chọn phát lại và chọn một file cần
được lịch sử phát lại, chương trình sẽ điều khiển chuột của người dùng giống hệt
như những gì người dùng đã thực hiện trong quá trình ghi lịch sử.
Trang 124.2 Sơ đồ thuật toán
Trang 13Hình 2 Sơ đồ thuật toán của ứng dụng điều khiển chuột
4.3 Ghi và ngừng ghi lịch sử
Như đã nói ở trên, để có thể thu được lịch sử hành vi sử dụng chuột của người dùng, chúng ta sẽ sử dụng Hooks Ở đây, chúng ta sẽ theo dõi các low-level
message nên chúng ta không cần phải sử dụng DLL
ta sẽ tạo một thread cho quá trình thu lịch sử để thread chính dùng để xử lý lệnh đến từ người dùng có thể hoạt Vì người dùng vẫn có thể tương tác với chương trình khi quá trình ghi lịch sử diễn ra, động song song
Khi bắt đầu ghi, chúng ta đồng thời cũng mở một file để có thể ghi lại lịch sử Lịch sử sẽ được lưu dưới dạng mỗi nhấp chuột sẽ được lưu trên 1 dòng, có dạng:
<loại hành vi của chuột> <thời gian> <tọa độ x> <tọa độ y> [dữ liệu thêm]
Chú thích:
Loại hành vi của chuột: dùng để phần biệt các loại hành vi sử dụng chuột
Trang 14 Thời gian: là thời gian hành vi được thực thi.
Tọa độ x & tọa độ y: Tọa độ mà hành vi chuột được thực hiện
Ví dụ: "m 1572407182261 1222 584", có nghĩa là di chuyển chuột (move) đến
Để có thể đảm bảo phát lại lịch sử giống như người dùng đã ghi lại nhất, chúng
ta sẽ sử dụng thời gian được lưu ở mỗi dòng để tính khoảng thời gian đợi giữa mỗi hành vi chuột Sau đó, chúng ta sẽ delay thread hiện tại, mới thời gian trễ là thời gian đợi giữa hành vi hiện tại và hành vi tiếp theo trừ cho thời gian mà chương trình
đã dùng để thực hiện hành vi
Trang 15CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
Mở source code và chạy chương trình từ IDE hoặc mở file DACSNM.exe
Chọn vị trí và tên file lịch sử muốn lưu và nhấn Record để tiến hành ghi lịch
sử Nhấn lại nút lần nữa hoặc nhấn phím Ctrl F2 khi đang mở giao diện chương tình để dừng ghi lịch sử
Chọn vị trí file lịch sử muốn phát lại, nhập số lần muốn phát lại và nhấn Play
Trang 162 Ghi lịch sử
Hình 4 Giao diện ghi lịch sử
Điền vị trí cần lưu file lịch sử cũng như tên của file lịch sử và nhấn Record hoặc bấm tổ hợp phím Ctrl F2 để bắt đầu quá trình lưu lịch sử chuột Nhấn nút
Recording… hoặc bấm lại tổ hợp phím Ctrl F2 lần nữa để ngừng quá trình ghi lịch
sử
Hình 5 File được tạo
File lịch sử được tạo ra trong thư mục đã chọn
3 Phát lại
Trang 17Chọn một file lịch sử đã thu trước đó, nhập số lần muốn phát lại và nhấn Play để
tiến hành phát lại lịch sử sử dụng chuột
3 Đánh giá kết quả
Chương trình đã hoàn thành những chức năng:
Chương trình có thể thu được lịch sử sử dụng chuột của người dùng và lưu vào một file cho người dùng tùy chọn vị trí
Chương trình cho phép người dùng chọn một file lịch sử đã thu để phát lại quá trình sử dụng chuột
Trang 18KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
1 Kết luận
Chương trình về cơ bản đã thực hiện được các chức năng đã đề ra Thông qua đềtài, ta học được thêm về cách mà windows xử lý hành động điều khiển chuột hay bàn phím của người dùng Đó là thông qua message queue Ta cũng biết thêm về cách để tương tác với message queue để từ đó theo dõi được hành vi của người dùng cũng như can thiệp vào để điều khiển chuột của người dùng
Tuy nhiên, chương trình vẫn chưa hoàn thiện về phần trải nghiệm người dùng cũng như về phần giao diện
2 Hướng phát triển
Xây dựng giao diện người dùng thân thiện hơn
Tối ưu trải nghiệm của người dùng
Tối ưu độ chính xác của quá trình xử lý chuột để có thể đạt được độ chính xác 100%
Trang 19PHẦN II: LẬP TRÌNH MẠNG
TIÊU ĐỀ: XÂY DỰNG TRÒ CHƠI VẼ HÌNH ĐOÁN TỪ ONLINE.
1 TCP/IP
Bộ giao thức TCP/IP hay còn gọi là bộ giao thức liên mạng, là một bộ các giao thức truyền thông gồm 2 giao thức chính là TCP (Transmission Control Protocol hay Giao thức Điều khiển Giao vận) và IP (Internet Protocol hay Giao thức Liên mạng) mà Internet và hầu hết mạng máy tính thương mại đang chạy trên đó Giao thức này đảm bảo chuyển giao dữ liệu tới nhận một cách đáng tin cậy và đúng thứ
tự Hơn nữa, TCP có chức năng phân biệt giữa dữ liệu của nhiều ứng dụng (như dịch vụ Web và dịch vụ Email) đồng thời chạy trên cùng một máy chủ
TCP là giao thức có chức năng thiết lập kết nối giữa các máy tính để truyền dữ liệu Nó chia nhỏ dữ liệu ra thành những gói (packet) và đảm bảo việc truyền dữ liệu diễn ra thành công
IP là giao thức có chức năng định tuyến (route) các gói dữ liệu khi chúng được truyền qua Internet, đảm bảo dữ liệu sẽ đến đúng nơi cần nhậnMột mô hình TCP/IP tiêu chuẩn bao gồm 4 lớp được chồng lên nhau, bắt đầu từ tầng thấp nhất là Tầng vật lý (Physical) → Tầng mạng (Network) → Tầng giao vận (Transport) và cuối cùng là Tầng ứng dụng (Application)
2 Mô hình Client-Server
Mô hình Client-Server (khách-chủ) là một mô hình mà tại đó các server sẽ là nơichứa, quản lý và phân phát các tài nguyên và dịch vụ đến cho các client Trong mô hình này, ta thường có một hoặc một số client kết nối đến một server thông qua kết nối mạng, gửi cho server tài nguyên hoặc yêu cầu xử lý đến cho server và sẽ được server xử lý rồi trả lại kết quả cho client
Trang 20CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
1 Phát biểu bài toán
"Nhìn hình đoán chữ" là một trò chơi hẳn nhiều người đã biết đến Đây là một trò chơi cực kỳ đơn giản, bạn sẽ được cho nhìn một hoặc một số bức hình và nhiệm
vụ của bạn là nghĩ xem bức hình đấy đang nói về từ nào Những bức hình có thể chỉđến nghĩa đen chính xác ví dụ như hình chiếc xe ô tô sẽ nói về từ "xe ô tô" Hoặc những bức hình có thể không thực sự liên quan đến nghĩa của một từ
Tuy nhiên, những trò chơi này thường ít có tính tương tác giữa những người chơi với nhau mà thường mang tính cá nhân Bởi vì, một người chơi chỉ cần nhận các bức hình và đoán chữ chứ không hề tương tác với những người chơi khác.Đây là lý do mà đề tài này được xây dựng Trò chơi vẽ hình đoán từ online là một trò chơi mà tại đó một người sẽ vẽ một bức hình, những người cùng chơi sẽ xem được người chơi đấy đang vẽ theo thời gian thực và nhanh tay đoán xem từ mà người vẽ muốn nói đến là từ gì Tại vì lí do đó, trò chơi sẽ đem đến tính tương tác giữa người vẽ và người đoán cũng như tính cạnh tranh giữa người chơi với nhau Người vẽ và người đoán sẽ xoay vòng thay phiên nhau thực hiện để đảm bảo một người có thể là người vẽ ở lượt chơi này và là người đoán ở lượt chơi khác
2 Các chức năng
1 Chọn tên hiển thị
Khi người dùng mở trò chơi lên, họ sẽ được chọn một tên tùy ý để sử dụng khi chơi Tên này sẽ không được trùng với tên của những người khác đang ở trong trò chơi tại thời điểm người chơi đăng nhập
2 Vẽ hình
Mỗi vòng chơi, trò chơi sẽ tự động chọn một người chơi nhất định để làm người
vẽ Người vẽ cũng sẽ chọn từ mà họ muốn vẽ Nhiệm vụ của người vẽ là thể hiện từmình vừa chọn thành hình ảnh bằng các vẽ Hình ảnh mà người vẽ vẽ sẽ được truyền tải trực tiếp theo thời gian thực đến những người còn lại trong trò chơi
3 Chat
Trang 21Trò chơi có hệ thống chat để người chơi có thể tương tác với nhau và cùng nhau tìm ra từ đúng Ngoài ra thì chat cũng là nơi để nhận thông báo từ trò chơi cũng như
là nơi để thực hiện các tác vụ khác như chọn từ hoặc đoán từ
4 Đoán từ
Người dùng sẽ được phép đoán từ không giới hạn số lần trong một vòng chơi Người dùng đoán từ bằng cách nhập vào chat Nếu từ đó là từ sai thì nó sẽ được hiển thị như là một câu chat Nếu nó đúng thì mọi người chơi sẽ nhận được thông báo rằng người chơi này đã đoán đúng thay vì hiển thị từ người chơi vừa nhập Và người chơi sau khi đoán đúng thì sẽ không thể chat được nữa để họ không thể nhắc
từ cho những người khác
3 Thiết kế chương trình
1 Ngôn ngữ lập trình
Chương trình được lập trình bằng ngôn ngữ lập trình Java Java là một ngôn ngữ
hỗ trợ rất mạnh mẽ cho việc lập trình Socket cũng như lập trình đa luồng Sử dụng Java giúp việc xây dựng trò chơi trở nên tiện lợi và dễ dàng hơn
2 Sơ đồ thuật toán