ĐỒ ÁN CƠ SỞ MẠNG ĐỀ TÀI :HỆ ĐIỀU HÀNH: TÌM HIỂU VÀ MÔ PHỎNG CƠ CHẾ GIAO TIẾP GIỮA CÁC TIẾN TRÌNH BẰNG MESSAGE QUEUE TRONG WINDOWS LẬP TRÌNH MẠNG: CHƯƠNG TRÌNH GAME UNOCHO PHÉP NHIỀU NGƯỜI CHƠI BÀI QUA MẠNG
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
Bộ môn Mạng & Truyền Thông
ĐỒ ÁN CƠ SỞ MẠNG
ĐỀ TÀI :
HỆ ĐIỀU HÀNH: TÌM HIỂU VÀ MÔ PHỎNG CƠ CHẾ GIAO TIẾP GIỮA CÁC TIẾN TRÌNH BẰNG MESSAGE QUEUE TRONG WINDOWS
LẬP TRÌNH MẠNG: CHƯƠNG TRÌNH GAME UNO
CHO PHÉP NHIỀU NGƯỜI CHƠI BÀI QUA MẠNG
Trang 23.GIAO TIẾP GIỮA CÁC TIẾN TRÌNH BẰNG MESSAGE QUEUE 6
Trang 32.CÁC LUỒNG DỮ LIỆU 13
Trang 4DANH SÁCH HÌNH ẢNH
Hình 1: Mô hình hoạt động của Message Queue 10
Hình 2: Xử lý nhập dữ liệu ở tiến trình 1 13
Hình 3: Xử lý xuất kết quả ở tiến trình 1 14
Hình 4: Lấy xử lí và trả kết quả ở tiến trình 2 15
Hình 5: Giao diện khởi tạo của 2 tiến trình 16
Hình 6: Thực hiện tiến trình 1 bằng cách nạp dữ liệu từ file txt 17
Hình 7: Thực hiện nạp dữ liệu ở tiến trình một bằng tay 17
Hình 8: File excel input 2 ma trận 1000x1000 18
Hình 9: File excel output ma trận 1000x1000 18
Hình 10: Sơ đồ quan hệ game UNO 26
Hình 11: Cơ sở dữ liệu game UNO 26
Hình 12: Xử lý login 27
Hình 13: Xử lý chơi game 28
Hình 14: Giao diện khời động server 29
Hình 15: Giao diện khởi động client 30
Hình 16: Server nhận và xử lý tin nhắn của client 30
Hình 17: Các client chat với nhau ở khung Chat room 31
Hình 18: Đủ 3 người join game, server xử lí và chia bài (7 lá) 32
Hình 19: Đến lượt chơi của mình, lá bài ở cao hơn là la bài được phép đánh 33
Hình 20: Khi không có lá bài nào hợp lệ, người chơi bốc bài 34
Hình 21: Khi có người hết bài, game kết thúc 35
Hình 22: Xem lại lịch sử kết quả các game trước đó 35
Trang 5DANH SÁCH TỪ VIẾT TẮT
Từ viết tắt Diễn giải
TCP/IP Transmission Control Protocol/Internet Protocol
Trang 62 Mục đích và ý nghĩa của đề tài
Tìm hiều về cơ chế giao tiếp của Message Queue giữa các tiến trình trongWindows, lập trình socket và giao thức TCP/IP Áp dụng các kiến thức trên để thựchiện chương trình xử lí tính toán và chương trình game UNO
Trang 7PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH
ĐỀ TÀI:
Tìm hiểu và mô phỏng cơ chế giao tiếp giữa các tiến trình
bằng Message Queue trong hệ điều hành Windows
Trang 8CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
Chương trình và tiến trình là hai khái niệm khác nhau mà ta cần phân biệt.Chương trình là một thực thể thụ động chưa các chỉ thị điều khiển máy tính thi hànhmột tác vụ cụ thể nào đó Khi thực hiện các chỉ thị này, chương trình được chuyểnthành các tiến trình là một thực thể chủ động, với con trỏ lệnh xác định kèm thêmtài nguyên phục vụ cho hoạt động
b Các loại tiến trình
Tiến trình có thể chia thành hai loại: tiến trình tuần tự (MS_DOS) và tiến trìnhsong song (uniprocesser và multiprocesser)
Tiến trình tuần tự: là các tiến trình mà điểm khởi tạo của nó là điểm kết thúc
của tiến trình trước đó
Tiến trình song song: là các tiến trình mà điểm khởi tạo của tiến trình nàymằn ở thân của các tiến trình khác, tức là có thể khởi tạo một tiến trình mới khi cáctiến trình trước đó chưa kết thúc Trong này tiến trình song song được chia thànhnhiều loại:
- Tiến trình song song độc lập
- Tiến trình song song có quan hệ thông tin
- Tiến trình song song phân cấp
- Tiến trình song song đồng mức
Trang 10c Các trạng thái của tiến trình
Trạng thái của tiến trình tại một thời điểm được xác định bởi hoạt động hiện thờicủa tiến trình tại thời điếm đó
Trong quá trình sống một tiến trình thay đổi trạng thái do nhiều nguyên nhânnhư: phải chờ một sự kiện nào đó xảy ra ,hay đợi một thao tác nhập xuất hoàn tất,buộc phải dừng hoạt động do hết thời gian xử lý
Tại một thời điểm một tiến trình có thể nhận một trong các trạng thái sau đây
- New: tiến trình đang được tạo lập
- Running: các chỉ thị của tiến trình đang được xử lý.
- Blocked: tiến trình chờ được cấp phát tài nguyên,hay chờ một sự kiện xảy ra.
- Ready: tiến trình chờ được cấp phát CPU để xử lý.
- Waiting: tiến trình phải dừng vì thiếu tài nguyên hay chờ một sự kiện nào đó.
- Halt: tiến trình hoàn tất xử lý
Các trạng thái của tiến trình được biểu diễn qua sơ đồ sau:
Hình 1 Sơ đồ các trạng thái của tiến trình
2 Tổng quan về giao tiếp giữa các tiến trình
Trong hệ thống các tiến trình không phải chạy hoàn toàn độc lập với nhau,nhưng nó có thể giao tiếp với nhau, liên lạc với nhau Chia sẻ thông tin: Nhiều tiếntrình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cungcấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung Hợp táchoàn thành tác vụ: Nhiều tiến trình cùng tham gia thực hiện một công việc Hìnhthức này sẽ đẩy nhanh khả năng xử lý công việc trong hệ thống
Trang 11 Các cơ chế giao tiếp tiến trình trong Windows: Hệ điều hành Windows cungcấp cho người dùng một số cơ chế giao tiếp giữa các tiến trình như là:
- Giao tiếp bằng tín hiệu (signals handing)
- Giao tiếp bằng đường ống (pipe)
- Giao tiếp bằng hàng đợi thông điệp (message queue)
- Giao tiếp bằng sử dụng vùng nhớ chia sẻ (share memory)
- Giao tiếp bằng đồng bộ tín hiệu semephore
- Giao tiếp trao đổi thông qua socket
3 Giao tiếp giữa các tiến trình bằng Message Queue
Message Queue là một mô hình giao tiếp truyền tin bất động bộ Có nghĩa trao đổigiữa người gửi và người nhận không cần xảy ra đồng thời, tại cùng 1 thời điểm.Người gửi có thể đẩy tin cần gửi vào hàng đợi (queue), và sau đó một số tiến trìnhđộc lập sẽ đẩy tin từ hàng đợi đến người nhận
Hình 1: Mô hình hoạt động của Message Queue
Trang 12hành Windows Server của họ kể từ Windows 95 Windows Server 2016 vàWindows 10 cũng bao gồm thành phần này Ngoài hỗ trợ nền tảng máy chủ chính,MSMQ đã được tích hợp vào các nền tảng nhúng của Microsoft từ năm 1999 MSMQ chịu trách nhiệm phân phối tin nhắn đáng tin cậy giữa các ứng dụng trong
hệ thống MSMQ đảm bảo phân phối đáng tin cậy Nó cũng hỗ trợ bảo mật và nhắntin dựa trên ưu tiên
MSMQ hỗ trợ cả nhắn tin bền và không bền để đánh đổi giữa hiệu suất hoặc tínhnhất quán bằng cách ghi tin nhắn vào đĩa hoặc chỉ trong RAM Tin nhắn không bềnchỉ có thể đạt được bằng cách gửi tin nhắn nhanh qua hàng đợi không giao dịch.Tìmhiểu và mô phỏng cơ chế giao tiếp giữa các tiến trình bằng Message Queue trong hệđiều hành Windows
Trang 13CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
1 Phân tích bài toán
● Bài toán 1: Xử lí các phép tính toán cơ bản
- Tiến trình 1 thực hiện đọc dữ liệu vào MessageQueue Input từ file txt hoặc
do người dùng nhập Sau đó in ra kết quả từ MessageQueue Output do tiến trình 2trả lại Người dùng nhập vào file txt các chuối biểu thức mỗi chuỗi gồm các kí tự số
và các kí tự +, -, *, /, (, ) Ví dụ : (1+2)*0+35+4/2
- Tiến trình 2 thực hiện đọc dữ liệu từ MessageQueue Input và xử lí biểu thứcsau đó trả kết quả về MessageQueue Output
● Bài toán 2: Xử lí nhân ma trận lớn 1000x1000
- Tiến trình 1 thực hiện đọc dữ liệu vào MessageQueue Input từ file excel với
dữ liệu là hai ma trận Sau đó in ra kết quả từ MessageQueue Output do tiến trình 2trả lại
- Tiến trình 2 thực hiện đọc dữ liệu từ MessageQueue Input và xử lí biểu thứcsau đó trả kết quả về MessageQueue Output
2 Cách áp dụng Message Queue vào chương trình
● Khởi tạo Message Queue:
- Vào phần Computer Management -> Services and Applications
- Chọn Message Queuing, tại đây ta sẽ thấy có 3 loại Message Queue của hệthống bao gồm Outgoing Queues, Private Queues và System Queues, ta có thể tạocác Message Queue ở đây để sử dụng trong chương trình (khuyến cáo không nêntạo Message Queue trong System Queues vì đây là các Queues dành cho hệ thống)
● Sử dụng Message Queue vừa tạo để thực hiện chương trình:
Sau khi khởi tạo 2 Message Queue Input và Output để truyền dữ liệu qua lại giữa 2tiến trình, ta cần phải khai báo chúng trong chương trình để có thể sử dụng bằngcách:
Trang 14Kích chuột phải vào Message Queue, chọn Properties
Trong tag General ta copy nội dung của ô Label
Vào chương trình, ta khai báo 2 MessageQueue tương ứng với 2 label vừa lấy được
ở trên
Trang 153 Sơ đồ thuật toán
Hình 2: Xử lí nhập dữ liệu ở tiến trình 1 Hình 2: Xử lý nhập dữ liệu ở tiến trình 1
Trang 17Hình 4: Lấy xử lí và trả kết quả ở tiến trình 2
Trang 18CHƯƠNG 3: KẾT QUẢ TRIỂN KHAI CHƯƠNG TRÌNH
1 Môi trường làm việc
- Chỉ dừng lại ở mức độ xử lý tính toán đơn giản
- Giao diện chưa được đầu tư
3 Kết quả chạy dược của chương trình
Hình 5: Giao diện khởi tạo của 2 tiến trình
Trang 19Hình 6: Thực hiện tiến trình 1 bằng cách nạp dữ liệu từ file txt
Hình 7: Thực hiện nạp dữ liệu ở tiến trình một bằng tay
Trang 20Hình 8: File excel input 2 ma trận 1000x1000
Hình 9: File excel output ma trận 1000x1000
Trang 21KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Tuy nhiên, đồ án còn tồn tại các vấn đề như sau:
- Các xử lí tính toán còn đơn giản
- Giao diện chưa được đầu tư
2 Hướng phát triển
Một số số hướng nghiên cứu và phát triển của đề tài như sau:
- Bổ sung thêm các thuật toán để xử lí các bài toán cao hơn
- Đầu tư thêm về giao diện
Trang 22PHẦN 2: LẬP TRÌNH MẠNG
ĐỀ TÀI
Chương trình game UNO cho phép nhiều người cùng chơi bài qua mạng.
(Lập trình socket sử dụng giao thức TCP/IP)
Trang 23CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1 Trò chơi UNO
a Giới thiệu về game UNO
Uno (/ˈuːnoʊ/; tiếng Ý và tiếng Tây Ban Nha: "một", cách điệu: UNO) là một tròchơi bài của Mỹ được chơi cùng với một bộ bài đặc biệt Nguyên tắc chung của tròchơi được lấy từ trò chơi bài Crazy Eights Trò chơi được Merle Robbins ởReading, một vùng ngoại ô của Cincinnati, bang Ohio, Mỹ, phát triển vào năm
1971
Một bộ bài Uno tiêu chuẩn có 108 lá bài Các lá bài này được chia ra 4 màu: đỏ,vàng, lục, lam; với mỗi tông màu, chúng lại được đánh số lớn dần từ 0 đến 9 Bêncạnh các lá bài đánh số là những lá bài đặc biệt, bao gồm: đổi màu (Wild), đổi màuthêm 4 (Wild draw 4), thêm 2 (Draw 2), đổi lượt (Reverse), cấm (Skip) [1]
Luật chơi: Mỗi lần người chơi chỉ được đánh một quân bài Người đầu tiên đánh
lá bài số với màu sắc đã chọn, có thể đánh các lá đặc biệt khác nhưng phải cùngtông màu hoặc có khả năng đổi màu Những người tiếp theo đánh theo nguyên tắc
"cùng số hoặc cùng màu"
Tính điểm: Sau khi kết thúc một ván, những người chơi còn lại cộng tổng điểmcác lá bài trên tay bản thân lại Ai có số điểm ít nhất là người thắng
Trang 242 Giao thức TCP/IP
a Tổng quan về TCP/IP
TCP/IP là tên viết tắt của cụm từ Transmission Control Protocol/Internet
Protocol, là một tập hợp các giao thức (protocol) trao đổi thông tin được sử dụng để
truyền tải và kết nối các thiết bị trong mạng Internet Cụ thể hơn, TCP/IP chỉ rõ cho
chúng ta cách thức đóng gói thông tin (còn được gọi là gói tin), được gửi và nhận bởi các máy tính có kết nối với nhau
Mô hình TCP/IP tiêu chuẩn bao gồm 4 tầng:
- Tầng 1: Tầng liên kết (Network Access)
- Tầng 2: Tầng mạng (Internet)
- Tầng 3: Tầng giao vận (Transport)
- Tầng 4: Tầng ứng dụng (Application)
b Cách thức hoạt động của TCP/IP
Khi truyền dữ liệu , quá trình tiến hành từ tầng trên xuống tầng dưới, qua mỗi tầng
dữ liệu được thêm vào thông tin điều khiển gọi là Header Khi nhận dữ liệu thì quátrình xảy ra ngược lại, dữ liệu được truyền từ tầng dưới lên và qua mỗi tầng thì phầnheader tương ứng sẽ được lấy đi và khi đến tầng trên cùng thì dữ liệu không cònphần header nữa
Ở mỗi tầng khác nhau dữ liệu được truyền vào là khác nhau:
- Tầng ứng dụng: dữ liệu là các luồng được gọi là stream
- Tầng giao vận: đơn vị dữ liệu mà TCP gửi xuống gọi là TCP segment
- Tầng mạng: dữ liệu mà IP gửi xuống tầng dưới gọi là IP Datagram
- Tầng liên kết: dữ liệu được truyền đi gọi là frame
3 Socket
a Socket là gì?
Socket là một điểm cuối (end-point) của liên kết truyền thông hai chiều way communication) giữa hai chương trình chạy trên mạng Các lớp Socket được sửdụng để biểu diễn kết nối giữa client và server, được ràng buộc với một cổng port
Trang 25(two-(thể hiện là một con số cụ thể) để các tầng TCP (TCP Layer) có thể định danh ứngdụng mà dữ liệu sẽ được gửi tới.
Socket cho phép thiết lập các kênh giao tiếp mà hai đầu kênh được đánh dấu bởihai cổng (port) Thông qua các cổng này một quá trình có thể nhận và gởi dữ liệuvới các quá trình khác
Ngoài số hiệu cổng, hai bên giao tiếp còn phải biết địa chỉ IP của nhau Địa chỉ
IP giúp phân biệt máy tính này với máy tính kia trên mạng TCP/IP Trong khi sốhiệu cổng dùng để phân biệt các quá trình khác nhau trên cùng một máy tính
b Nguyên lí hoạt động
Tại phía server: Thông thường, một chương trình server chạy trên một máy tính
cụ thể, chương trình này có Server Socket, được ràng buộc bởi cổng (Port number)
cụ thể Các chương trình Server chỉ chờ đợi, lắng nghe tại Server Socket các Client
để thực hiện một yêu cầu kết nối
Tại phía client:Các Client biết tên máy của máy tính mà trên đó server đangchạy và số cổng mà server lắng nghe Để thực hiện một yêu cầu kết nối, Client cốgắng tạo ra cuộc gặp với máy chủ trên máy tính của server và cổng Các Client cũngcần phải tự định danh chính nó với server để gắn với một cổng địa phương (localport) sẽ được sử dụng trong suốt quá trình kết nối này (thông thường nó được gánbởi hệ điều hành)
4 Mô hình Client-Server
Mô hình client/server sử dụng socket ở chế độ hướng kết nối TCP có thể được chiathành 4 giai đoạn:
Giai đoạn 1: Server tạo Socket, gán số hiệu cổng và lắng nghe yêu cầu nối
kết Server sẵn sàng phục vụ Client.socket(): Server yêu cầu tạo một socket để cóthể sử dụng các dịch vụ của tầng vận chuyển
- bind(): Server yêu cầu gán số hiệu cổng (port) cho socket
- listen(): Server lắng nghe các yêu cầu nối kết từ các client trên cổng đã đượcgán
Giai đoạn 2: Client tạo Socket, yêu cầu thiết lập một nối kết với Server.
Trang 26- socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ củatầng vận chuyển, thông thường hệ thống tự động gán một số hiệu cổng cònrảnh cho socket của Client.
- connect(): Client gởi yêu cầu nối kết đến server có địa chỉ IP và Port xácđịnh
- accept(): Server chấp nhận nối kết của client, khi đó một kênh giao tiếp ảođược hình thành, Client và server có thể trao đổi thông tin với nhau thôngqua kênh ảo này
Giai đoạn 3: Trao đổi thông tin giữa Client và Server.
- Sau khi chấp nhận yêu cầu nối kết, thông thường server thực hiện lệnh read()
và nghẽn cho đến khi có thông điệp yêu cầu (Request Message) từ clientgởi đến
- Server phân tích và thực thi yêu cầu Kết quả sẽ được gởi về client bằng lệnhwrite()
- Sau khi gởi yêu cầu bằng lệnh write(), client chờ nhận thông điệp kết quả(ReplyMessage) từ server bằng lệnh read()
Giai đoạn 4: Kết thúc phiên làm việc.
- Các câu lệnh read(), write() có thể được thưc hiện nhiều lần (ký hiệubằng hình ellipse)
- Kênh ảo sẽ bị xóa khi Server hoặc Client đóng socket bằng lệnh close()
Trang 27CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
1 Các chức năng game
- Cho phép các client kết nối với server để tham gia vào game
- Nếu game đã đủ người chơi, client sẽ là người xem
- Nếu game chưa đủ người chơi, client sẽ vào vị trí chơi game
- Cho phép nhiều máy chơi game với nhau
- Cho phép chat nhóm (cả người chơi và người xem)
- Lưu lại lịch sử các trận đấu và có thể xem lại kết quả
2 Các luồng dữ liệu
● Dữ liệu gửi từ server về client:
- Dữ liệu chia các thẻ bài đầu game (lần đầu chia 7 thẻ)
- Dữ liệu yêu cầu thực hiện lượt chơi
- Dữ liệu các thẻ bài mỗi lần người chơi bị phạt
- Dữ liệu thẻ bài của người chơi khác đã đánh
- Dữ liệu thông báo người chơi khác đã “UNO” (còn 1 quân bài)
- Dữ liệu tin nhắn của các client khác
● Từ client gửi lên server:
- Dữ liệu đăng kí user
- Dữ liệu đăng nhập
- Dữ liệu đăng kí chơi game
- Dữ liệu thẻ bài mà người chơi đánh
- Dữ liệu thông báo đã “UNO” (còn 1 quân bài)
- Dữ liệu gửi đến nhóm chat