Đồ án môn học lập trình hệ thống "Sử dụng Socket để xây dựng chương trình chat video theo mô hình CLIENT -SERVER"

Đồ án môn học lập trình hệ thống "Sử dụng Socket để xây dựng chương trình chat video theo mô hình CLIENT -SERVER"

lOMoARcPSD|208990 13
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN TRUYỀN THÔNG
VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN MÔN HỌC LẬP TRÌNH HỆ THỐNG
ĐỀ TÀI:
SỬ DỤNG SOCKET ĐỂ XÂY DỰNG CHƯƠNG
TRÌNH CHAT THEO HÌNH CLIENT -SERVER
TRONG IPC
Sinh viên thực hiện : TỪ CÔNG MINH
TRẦN CÔNG TIẾN
NGUYỄN HỒNG SƠN
NGUYỄN THỊ THANH VÂN
HOÀNG THỊ DIÊU
Lớp : 21KIT || 21JIT
HƯƠNG
Giảng viên hướng dẫn : TS.NGUYỄN HỮU NHẬT MINH
lOMoARcPSD|208990 13
Đà Nẵng, tháng 12 năm 2023
lOMoARcPSD|208990 13
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN TRUYỀN THÔNG
VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN MÔN HỌC LẬP TRÌNH HỆ THỐNG
ĐỀ TÀI:
SỬ DỤNG SOCKET ĐỂ XÂY DỰNG CHƯƠNG
TRÌNH CHAT THEO HÌNH CLIENT -SERVER
TRONG IPC
Sinh viên thực hiện : TỪ CÔNG MINH
TRẦN CÔNG TIẾN
NGUYỄN HỒNG SƠN
NGUYỄN THỊ THANH VÂN
HOÀNG THỊ DIÊU
Lớp : 21KIT || 21JIT
HƯƠNG
Giảng viên hướng dẫn : TS.NGUYỄN HỮU NHẬT MINH
Đà Nẵng, tháng 12 năm 2023
lOMoARcPSD|208990 13
Chương trình chat client-server
LI CM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn chân thành đến các thầy trong trường đã
dạy em những kiến thức hay, các thầy trong bộ môn đã truyền đạt những kiến
thức chuyên ngành bổ ích cũng như các knăng trong cuộc sống. Giúp cho chúng em
trưởng thành hơn trong quá trình làm đồ án môn học.
Đặc biệt, em xin cảm ơn sâu sắc tới giáo viên hướng dẫn TS.Nguyễn Hữu Nhật
Minh - Giảng viên khoa Khoa học máy tính, Trường Đại học Công nghệ Thông tin &
Truyền thông Việt Hàn - Đại học Đà Nẵng đã tận tình hướng dẫn chu đáo, góp ý theo
sát giúp em có thể hoàn thành đồ án tốt nhất.
Trong quá trình thực hiện đề tài nghiên cứu, bản thân chúng em đã cố gắng nỗ lực,
tuy nhiênkhông tránh khỏi sai sót. Chúng em mong nhận được sự góp ý của thầy
giáo, và từ phía hội đồng để đề tài nghiên cứu của chúng em được hoàn thiện hơn.
Xin chân thành cảm ơn!
lOMoARcPSD|208990 13
Chương trình chat client-server
NHẬN XÉT CỦA GO VIÊN HƯNG DN
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
ii
lOMoARcPSD|208990 13
Chương trình chat client-server
MC LỤC
LỜI CẢM ƠN ............................................................................................................. i
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ........................................................ ii
MỤC LỤC iii
DANH MỤC HÌNH ẢNH .......................................................................................... v
DANH MỤC CÁC TỪ VIẾT TẮT .......................................................................... vi
MỞ ĐẦU 1
I. do chọn đề tài ..................................................................................................... 1
II. Mục tiêu của đề tài ................................................................................................. 1
III. Nội dung chính ..................................................................................................... 1
IV. Kết qu .................................................................................................................. 1
V. Bố cục báo cáo ........................................................................................................ 2
CHƯƠNG 1 SỞ THUYẾT .......................................................................... 3
1.1 lược về lập trình hệ thống ............................................................................ 3
1.1.1 Khái niệm ......................................................................................................... 3
1.1.2 Tổng quan lập trình hệ thống ............................................................................. 3
1.2 Tìm hiểu về truyền thông giữa các tuyến trình – Interprocess
Communication.......................................................................................................... 4
1.2.1 Khái niệm Process và IPC ................................................................................. 4
1.2.2 sao các process phải giao tiếp với nhau ......................................................... 7
1.2.3 Shared Memory-Trao đổi bằng phân đoạn nhớ chung........................................ 7
1.2.4 Một số chế giao tiếp giữa các process trong Linux .......................................... 8
1.3 Lập trình Socket trên ........................................................................................ 8
1.3.1 hình client-server ........................................................................................ 8
1.3.2 lược về Socket ............................................................................................. 8
1.3.3 Minh họa lập trình socket ................................................................................ 10
1.4 Ngôn ngữ lập trình và các tools ...................................................................... 10
1.4.1 C++ ................................................................................................................. 11
lOMoARcPSD|208990 13
Chương trình chat client-server
1.4.2 Vmware .......................................................................................................... 13
CHƯƠNG 2. TRIỂN KHAI .................................................................................... 15
2.1 Demo chương trình ............................................................................................ 15
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ............................................................... 18
I. Kết qu đạt được ................................................................................................... 18
II. Hướng phát triển ................................................................................................. 18
TÀI LIỆU THAM KHẢO ....................................................................................... 19
iv
lOMoARcPSD|208990 13
Chương trình chat client-server
DANH MC HÌNH ẢNH
Hình 1. lược về lập trình hệ thống ........................................................................... 3
Hình 2. Quy trình ......................................................................................................... 6
Hình 3. Share Memory ................................................................................................. 7
Hình 4. đồ Stream sockets ..................................................................................... 9
Hình 5. đồ Datagram Socket ................................................................................. 10
Hình 6. C++ ............................................................................................................... 11
Hình 7. Ưu điểm của ngôn ngữ lập trình C++ ............................................................ 12
Hình 8. Logo VMWare .............................................................................................. 13
Hình 9. Cấu trúc thư mục ........................................................................................... 15
Hình 10. Màn hình đăng nhập .................................................................................... 16
Hình 11. Màn hình tin nhắn ....................................................................................... 16
Hình 12. Ghi log tin nhắn........................................................................................... 17
Hình 13. Database...................................................................................................... 17
lOMoARcPSD|208990 13
Chương trình chat client-server
DANH MC CÁC TỪ VIT TẮT
STT
Viết tắt
Cm từ
1
CNPM
Công nghệ phần mềm
2
CNTT
Công nghệ thông tin
3
5E
Engagement, Exploration, Explanation, Elaboration, Evaluation
vi
lOMoARcPSD|208990 13
I. do chọn đề tài
MỞ ĐẦU
Hiện nay, với sự phát triển của công nghệ thông tin mạng internet, việc giao
tiếp qua chat trở nên phổ biến cần thiết hơn bao giờ hết. Việc tìm hiểu xây dựng
một ứng dụng chat client-server giúp chúng ta hiểu hơn vcách thức hoạt động của
các ứng dụng chat thực tế và thể áp dụng kiến thức này vào các dự án thực tế khác.
Xây dựng ứng dụng chat client-server một dự án phù hợp để học nghiên cứu
về mạng máy tính, giao thức truyền thông, mã hóa và bảo mật dữ liệu. Đề tài này cung
cấp cơ hội để làm việc với các khái niệm và công nghệ quan trọng trong lĩnh vực mạng
bảo mật.
Tóm lại, xây dựng một chương trình chat client-server không chỉ giúp chúng ta
hiểu hơn về cách thức hoạt động của các ứng dụng chat, còn cung cấp hội để
học hỏi phát triển k năng lập trình, hiểu về mạng và bảo mật thông tin.
II. Mục tiêu của đề tài
-
Xây dựng giao diện đơn giản nhưng chi tiết giúp người dùng chat với nhau
-
Xây dựng được chương trình chat cục bộ toàn cục
III. Nội dung chính
-
Tìm hiều, ứng dụng các ngôn ngữ lập trình vào thiết kế ứng dụng (C++).
-
Tìm hiểu về hiểu giao thức TCP/IP
-
Tìm hiểu về hình client-server
-
Tìm hiểu về lập trình Socket trên Linux
-
Tìm hiểu về Shared memory
IV. Kết quả
-
Xây dựng thành công chương trình chat theo hình client-server.
-
thể tự vận dụng lại các kiến đã được học.
-
Với quy ứng dụng vừa nhỏ, cộng thêm thời gian không cho phép nên đề
tài “Xây dựng chương trình chat theo mô hình client-server” thể chưa có đầy
đủ các chức năng hoàn thiện của một ứng dụng chat. Trong quá trình làm còn
nhều sai sót, do kiến thức hạn chết còn ít nhiều thiếu sót về việc hiển thị
lOMoARcPSD|208990 13
Chương trình chat client-server
cũng như tối ưu thuật toán, thời gian thực hiện. Cũng như giao diện chưa được
thân thiện với người dùng. Một số lỗi còn xảy ra trong lúc chạy chương trình.
Trong tương lai chúng tôi sẽ cố gắng khắc phục những sai sót này.
V. Bố cco cáo
-
Các phần của báo cáo được chia ra thành các chương như sau:
-
Chương 1: sở lý thuyết
-
Gồm các cơ sở thuyết về các đối tượng được nhắm đến
-
Chương 2: Triển khai
-
Cuối cùng sẽ các phần như: kết luân, hướng phát triển danh mục
tài liệu tham khảo
2
lOMoARcPSD|208990 13
CHƯƠNG 1 SỞ THUYẾT
1.1 lược về lập trình hệ thống
1.1.1 Khái niệm
Lập trình hệ thống quá trình phát triển phần mềm hệ thống. So với lập trình
ứng dụng, lập trình hệ thống tập trung vào việc tạo ra phần mềm cung cấp dịch vụ cho
phần cứng máy tính. Mục tiêu của lập trình hệ thống là tạo ra những phần mềm hỗ tr
hoạt động và quản lý của hệ thống máy tính.
Hình 1. lược về lập trình hệ thống
Lập trình hệ thống đòi hỏi một sự hiểu biết sâu về phần cứng máy tính. Nhà lập
trình hệ thống cần phải nắm vững kiến thức về kiến trúc hệ thống, hệ điều hành, quản
tài nguyên và các khái niệm bản của lập trình.
Các nhiệm vụ của lập trình hệ thống thể bao gồm:
-
Quản tài nguyên: Lập trình hệ thống liên quan đến việc quản phân phối i
nguyên phần cứng, như bộ nhớ, CPU, đĩa cứng mạng. Điều này bao gồm việc
tối ưu hóa việc sử dụng tài nguyên và đảm bảo tính hiệu quả và đáng tin cậy của h
thống.
-
Quản quá trình: Lập trình hệ thống đảm nhiệm việc quản các quá trình, bao
gồm tạo, kết thúc, lập lịch thực thi và quản lý bộ nhớ.
-
Giao tiếp với phần cứng: Lập trình hệ thống liên quan đến việc giao tiếp điều
khiển các thiết bị phần cứng như bàn phím, chuột, máy in, đầu đĩa và các thiết bị
ngoại vi khác.
Lập trình hệ thống đóng vai trò quan trọng trong việc xây dựng các hệ thống
phức tạp như hệ thống điều khiển, máy chủ, hệ thống nhúng các ứng dụng yêu cầu
hiệu năng cao tương tác trực tiếp với phần cứng.
1.1.2 Tổng quan lập trình hệ thống
Những điểm đặc biệt hơn trong lập trình hệ thống:
lOMoARcPSD|208990 13
Chương trình chat client-server
-
Những nhà lập trình sẽ tạo những gánh vác về phần cứng một số thuộc tính
kháccủa những chương trình chạy trên hệ thống đó, sẽ thường khai thác
những thuộc tính đó (choví dụ bởi việc sử dụng một giải thuật mà được biết
hiệu quả khi nào được sử dụng với phầncứng đặc biệt).
-
Thông thường một ngôn ngữ lập trình cấp thấp hoặc tiếng địa phương ngôn ngữ
lậptrình sử dụng đó là:
thể hoạt động trong những môi trường tài nguyên bắt buộc.
rất hiệu quả thể thực hiện một ít trên đầu.
một thư viện thực hiện nhỏ, hoặc không ở mọi thứ.
Cho phép trực tiếp thô” điều khiển qua truy cập bộ nhớ và điều
khiểnchảy tràn.
Để cho người lập trình viết những phần của chương trình ngay tức khắc
trên ngôn ngữ assembly.
Những nhà lập trình hệ thống một cách đầy đủ thì khác với lập trình ứng dụng
những nờilập trình hướng tới chuyên về một hoặc cái khác.
Trong lập trình hệ thống, những phương tiện lập trình hạn thường sẵn có. Sự
sử dụng của tập hợp rác tự động thì không phải phổ biến gỡ rối không đổi đôi
khi để m. Thư việnthực hiện, nếu sẵn mọi i, thì ít mạnh hơn nhiều thông
thường, làm ít sợ kiểm tra lỗi hơn. Bởi những sự hạn chế đó, màn hình sự
đăng thường được sử dụng; những hệ điềuhành thể vô cùng chi tiết hóa
những hệ thống con đăng ký.Thực hiện những phần nhất định trong Hệ điều hành và
những quy định hoạt động mạng những nhà lập trình hệ thống (cho ví dụ thi hành phân
trang (bộ nhớ ảo) hoặc một trình điều khiểnthiết bị cho một hệ điều hành).
1.2 Tìm hiểu về truyền thông giữa các tuyến trình Interprocess
Communication
1.2.1 Khái niệm Process IPC
-
Inter-process communication (IPC) một chế cho phép trao đổi dữ liệu giữa
các quá trình.Bằng cách cung cấp một người dùng với một tập hợp các giao diện
lập trình, IPC giúp một lậptrình tổ chức thực hiện hoạt động giữa các quá trình
4
lOMoARcPSD|208990 13
Chương trình chat client-server
khác nhau. IPC cho phép một ứng dụng để kiểm soát một ứng dụng khác, do đó
cho phép chia sẻ dữ liệu không cần can thiệp
-
Một quy trình một chuỗi chương trình đang chạy cùng với tất cả các tài nguyên
mã của thể ảnh hưởng (còn được gọi là bối cảnh quy trình). Bối cảnh của
quy trình bao gồm trạng thái quy trình, hình ảnh của máy thực thi tương ứng
với chương trình, bộ nhớ được phân bổ, bộ tả tài nguyên được quy trình sử
dụng như bộ mô tả hoặc trình xử lý tệp, các thuộc tính bảo mật như chủ sở hữu quy
trình quyền của quy trình, cuối cùng, nhưng không kém phần quan trọng,
trạng thái bộ xử như nội dung của các thanh ghi địa chỉ bộ nhớ vật lý. Trạng
thái tiến trình thể hiện trạng thái của tiến trình liên quan đến việc sử dụng thời gian
của bộ xử lý. Một tiến trình có thể một trong ba trạng thái:
Đang chạy - Tiến trình đang sử dụng CPU (nó đã được phân bổ thời gian xử
và mã máy của tiến trình được bộ xử thực thi về mặt vật lý).
Bị chặn - Quá trình không thể chạy cho đến khi một số skiện bên ngoài xảy ra
(ví dụ: dữ liệu được nhận từ mạng). CPU thể rảnh trong thời gian này nếu
không tiến trình hiện có nào sẵn sàng để chạy.
Ready (Runnable) - Tiến trình đã sẵn sàng để chạy (không phải đợi sự kiện nào
xảy ra), nhưng được hệ điều hành tạm dừng để cho các tiến trình khác chạy
trên cùng CPU.
-
Hình 1.2 trình bày bằng đồ họa các chuyển đổi trạng thái xảy ra trong vòng đời của
một quy trình. Tùy thuộc vào thuật toán lập lịch của hệ điều hành và đặc thù của
quy trình (ứng dụng người dùng), trạng thái của quy trình sẽ dao động định kỳ giữa
ba trạng thái được mô tả trong hình. Hình 1.2 minh họa tất cả các chuyển đổi trạng
thái thể xảy ra trong các tình huống sau:
Transition 1 - Xảy ra khi một tiến trình không thể tiếp tục đang chờ một
sự kiện bên ngoài nào đó. Ví dụ: khi một tiến trình bắt đầu kết nối đến máy chủ,
tiến trình đó sẽ bị chặn cho đến khi máy chủ phản hồi.
Chuyển tiếp 2 - Gây ra bởi bộ lập lịch tiến trình khi quyết định tạm dừng
việc thực thi tiến trình hiện tại cho một tiến trình khác hội chạy. Quá
lOMoARcPSD|208990 13
Chương trình chat client-server
trình bị gián đoạn trạng thái của được lưu lại để tiếp tục hoạt động từ
cùng thời điểm mà nó bị gián đoạn không bị gián đoạn.
Chuyển tiếp 3 - Gây ra bởi bộ lập lịch quy trình khi quyết định cho một quy
trình sẵn sàng có hội chạy. Chuyển tiếp 2 3 về bản đang tạo ra ảo giác
về việc xử song song.
Hình 2. Quy trình
Chuyển tiếp 4—Xảy ra khi xảy ra sự kiện bên ngoài quá trình bị chặn đang
chờ đợi (chẳng hạn như sxuất hiện của một số thông báo đầu vào). Quá trình
chuyển đổi này thường được kích hoạt bởi tín hiệu gián đoạn bộ xử được tạo
bởi thiết bị ngoại vi I/O tương ứng hoặc giao diện mạng.
-
Khi nhiều tiến trình trạng thái SẴN SÀNG, hệ điều hành phải quyết định tiến
trình nào trong số chúng sẽ chạy trước. sử dụng thuật toán lập lịch để xác định
các quy trình sẽ được phân bổ thời gian xử lý và theo thứ tự nào. Các thuật toán lập
kế hoạch, như được tả bằng đồ họa trong Hình. 1.3, đồng thời xác định thời
điểm dừng một tiến trình và dành thời gian cho CPU cho một tiến trình khác. Các
thuật toán lập lịch thể thực hiện việc này một cách tự nguyện (“lập lịch không
ưu tiên”) hoặc bắt buộc (“lập lịch ưu tiên”). Lập lịch không ưu tiên liên quan đến
việc các tiến trình sẵn sàng tbỏ thời gian của bộ xử để cho phép các tiến trình
khác chạy. Điều này thường xảy ra khi tiến trình hiện đang chạy phải chuyển sang
trạng thái BLOCKED, trong khi chờ sự kiện bên ngoài. Khi lập lịch ưu tiên được
sử dụng, quy trình hiện đang chạy sẽ bị buộc vào trạng thái SẴN SÀNG để cho
6
lOMoARcPSD|208990 13
Chương trình chat client-server
phép các quy trình khác chạy. Lập lịch ưu tiên thể được thực hiện theo chính
sách lập lịch.
1.2.2 sao các process phải giao tiếp với nhau
Việc cho phép truyền data giữa các process do những do sau:
- Giúp chia sẻ thông tin giữa các users.
- Giúp speech up các tác vụ trong máy tính.
- Giúp xây dựng modun.
- Giúp thuận tiện trong chạy nhiều tác vụ cùng một lúc.
1.2.3 Shared Memory-Trao đổi bằng phân đoạn nhớ chung
Shared memory (bộ nhớ được chia sẻ) chế giao tiếp liên tiến trình (IPC) có
sẵn trong Linux và các hệ thống giống Unix khác, khi một bộ nhớ chung được sử dụng
cho hai hoặc nhiều tiến trình khác nhau.
Trong các chế giao tiếp giữa các tiến trình khác như các pipe (đường ống) hay
message queue (hàng đợi tin nhắn), cần thực hiện các bước gửi dữ liệu từ tiến trình
này sang trình khác. Tuy nhiên, đối với shared memory, không bất kỳ hành vi
truyền dữ liệu nào cần phải thực hiện đây cả, các tiến trình đều thể truy cập vào
bộ nhớ chung. Và giao tiếp được thực hiện thông qua bộ nhớ được chia sẻ này, nơi các
thay đổi được thực hiện bởi một tiến trình thể được xem bởi tiến trình khác.
Hình 3. Share Memory
lOMoARcPSD|208990 13
Chương trình chat client-server
đây, các tiến trình chia sẻ một vùng nhớ vật thông qua trung gian không gian
địa chỉ của chúng. Một vùng nhớ chia sẻ tồn tại độc lập với các tiến trình, và khi một
tiến trình muốn truy xuất đến vùng nhớ này, tiến trình phải kết gắn vùng nhớ chung đó
vào không gian địa chỉ riêng của từng tiến trình, và thao tác trên đó như một vùng nhớ
riêng của mình.
1.2.4 Một số chế giao tiếp giữa các process trong Linux
Linux cung cấp một số chế giao tiếp giữa các tiến trình gọi IPC (Inter-
ProcessCommunication):
Signals handling - Trao đổi bằng tín hiệu.
Pipe -Trao đổi bằng chế đường ống.
Message Queues - Trao đổi thông qua hàng đợi tin nhắn.
Shared Memory - Trao đổi bằng phân đoạn nhớ chung.
Giao tiếp thông qua socket.
Giao tiếp đồng bộ dùng semaphore
1.3 Lập trình Socket trên
1.3.1 hình client-server
-
Client Server mô hình phổ biến cho giao tiếp giữa 2 tiến trình/2 máy, trong đó,
tiến trìnhclient kết nối đến tiến trình server để yêu cầu trao đổi dữ liệu.
-
Client cần biết về sự tồn tại địa chỉ của tiến trình server, nhưng server không cần
biết về sựtồn tại địa chỉ của client cho đến khi kết nối được thiết lập.
-
Mỗi khi kết nối được thiết lập, cả 2 bên đều thể trao đổi (gửi và nhận dữ liệu).
-
Để thiết lập một kết nối cho cả 2 phía, cần xây dựng một socket. Có thể hiểu socket
như một điểm đầu cuối của kênh kết nối giữa 2 tiến trình.
1.3.2 lược về Socket
Socket điểm cuối end-point trong liên kết truyền thông hai chiều (two-way
communication)biểu diễn kết nối giữa Client Server. Các lớp Socket được ràng buộc
với một cổng port (thểhiện một con số cụ thể) để các tầng TCP (TCP Layer) thể
định danh ứng dụng dữ liệu sẽ được gửi tới.
2 loại socket được sử dụng rộng rãi là: stream sockets datagram sockets.
8
lOMoARcPSD|208990 13
Chương trình chat client-server
- Stream sockets: Dựa trên giao thức TCP (Tranmission Control Protocol), giao
thức hướngluồng (stream oriented). Việc truyền dữ liệu chỉ thực hiện giữa 2 tiến
trình đã thiết lập kết nối.Giao thức này đảm bảo dữ liệu được truyền đến nơi nhận
một cách đáng tin cậy, đúng thứ tựnhờ vào cơ chế quản luồng lưu thông trên
mạng chế chống tắc nghẽn.
Hình 4. đồ Stream sockets
- Datagram sockets: Dựa trên giao thức UDP (User Datagram Protocol), giao thức
hướngthông điệp (message oriented). Việc truyền dữ liệu không yêu cầu sự thiết
lập kết nối giữatiến quá trình. Ngược lại với giao thức TCP thì dữ liệu được truyền
theo giao thức UDP khôngđược tin cậy, thế không đúng trình tự lặp lại. Tuy
nhiên không yêu cầu thiết lập kếtnối không phải những chế phức tạp
nên tốc độ nhanh… ng dụng cho các ứng dụng truyền dữ liệu nhanh như chat,
game…..
lOMoARcPSD|208990 13
Chương trình chat client-server
Hình 5. đồ Datagram Socket
1.3.3 Minh họa lập trình socket
hình lập trình socket TCP giữa 2 tiến trình client server như sau:
- Các bước thiết lập một socket phía client gồm:
+ Tạo một socket bằng hàm socket().
+ Kết nối socket đến địa chỉ của server bằng hàm connect().
+ Gửi nhận dữ liệu: một số cách khác nhau, đơn giản nhất sử
dụng cácmread() write().
+ Đóng kết nối bằng hàm close().
- Các bước thiết lập một socket phía server gồm:
+ Tạo một socket bằng hàm socket()+ Gắn (bind) socket đến địa chỉ của
server sử dụng hàm bind(). Đối với server trêninternet địa chỉ bao gồm
địa chỉ ip của máy host + số hiệu cổng dịch vụ (port number).
+ Lắng nghe (listen) các kết nối đến từ clients sử dụng hàm listen().
+ Chấp nhận các kết nối sử dụng hàm accept(). Hàm này sẽ dừng (block)
cho đến khinhận được một client kết nối đến.
+ Gửi và nhận dữ liệu với client (hàm read(), write()).
+ Đóng kết nối bằng hàm close()
1.4 Ngôn ngữ lập trình và các tools
10
lOMoARcPSD|208990 13
Chương trình chat client-server
1.4.1 C++
Hình 6. C++
-
C++ một ngôn ngữ lập trình được phát triển vào năm 1979 tại phòng thí nghiệm
Bell bởi Bjarne Stroustrup. Đây được gọi ngôn ngữ bậc trung (middle-level)
một phần mở rộng của ngôn ngữ lập trình C hoặc “C với các lớp Class” C++
sự kết hợp các tính năng của ngôn ngữ cấp cao cấp thấp.
-
Ngôn ngữ lập trình này thể chạy trên nhiều nền tảng khác nhau như: Windows,
macOS Unix. Từ những thập niên 1990, C++ đã trở thành một trong những
ngôn ngữ thương mại được ưa thích của các lập trình viên. Theo thời gian đã
mở rộng đáng kể hiện nay nhiều tính năng như: lập trình tổng quát, lập trình
thủ tục, lập trình hướng đối tượng,...
do C++ trở thành ngôn ngữ tiềm năng?
Để biết sao C++ ngôn ngữ tiềm năng thì chúng ta không thể bỏ qua những điểm
mạnh nổi bật như:
-
Tính phổ biến: Lập trình viên C++ một trong những công việc được các nhà
tuyển dụng trên toàn cầu m kiếm nhiều. Điều này thể cho thấy C++ một
trong những ngôn ngữ lập trình phổ biến nhất trên thế giới.
-
Dễ hiểu dễ sử dụng: C++ được biết đến là ngôn ngữ lập trình đơn giản nhất.
Lập trình này hoạt động theo nguyên tắc phân nhỏ các nhiệm vụ lớn thành các
nhiệm vụ nhỏ cho bất kỳ dự án nào. Cấu trúc câu lệnh dễ hiểu, ít từ khóa nên
khá dễ học dễ sử dụng.
-
Thư viện đa dạng, phong phú: có nhiều tài nguyên hỗ trợ cho ngôn ngữ này như
đồ họa API, 2D, 3D, vật lý các thiết bị âm… giúp cho các lập trình viên dễ thực
thi.
lOMoARcPSD|208990 13
Chương trình chat client-server
-
Đa mô hình: C++ cũng cho phép bạn lập trình theo cấu trúc tuyến tính, hướng
chức năng, hướng đối tượng đa dạng tùy theo yêu cầu của người lập trình.
-
Tính di động cao: một đoạn code C++ thể chuyển đổi dễ dàng khi chạy
trong macOS, Window hay Linux. Nhờ đó lập trình viên không phải tốn
thời gian viết lại chương trình khi sử dụng để chạy trên nhiều platform khác
nhau.
-
nhiều công cụ, phần mềm và IDE hỗ trợ giúp bạn đơn giản hóa công việc.
-
Chính vì sở hữu nhiều ưu điểm mà C++ đáng để học trong những ngôn nglập
trình. C++ bản nền tảng định hướng cho việc tiếp cận sau y với c
ngôn ngữ lập trình khác.
Hình 7. Ưu điểm của ngôn ngữ lập trình C++
12
lOMoARcPSD|208990 13
Chương trình chat client-server
1.4.2 Vmware
Hình 8. Logo VMWare
-
VMware một phần mềm máy chủ ảo chức năng như một hệ thống máy
tính ảo với đầy đủ CPU, bộ nhớ, bộ lưu trữ riêng. Máy ảo được tạo trên một hệ
thống phần cứng vật máy chủ cho phép người dùng chạy các hệ điều
hành, các ứng dụng khác trên chúng.
-
Phần mềm VMware Workstation được phát hành bởi công ty VMware, cho
phép người dùng tạo s dụng trực tiếp máy ảo trên laptop hoặc PC
chuyển đổi dễ dàng giữa máy ảo.
Chức năng chính ca VMware gì?
-
Tạo quản các máy ảo: VMware cung cấp các công cụ giải pháp cho
phép người sử dụng tạo quản các máy ảo trên máy tính của họ. Các máy
ảo này giống như các máy tính thực tế, cho phép người sử dụng chạy các hệ
điều hành các ứng dụng khác trên chúng.
-
Quản các máy tính trong môi trường doanh nghiệp: Công cụ sẽ các nh
năng hỗ trợ người quản trị IT quản lý và theo dõi các máy tính trong môi trường
doanh nghiệp, hỗ trợ người quản trị thể dễ dàng quản bảo trì các hệ
thống máy tính.
-
Đồng bộ hóa các môi trường máy tính: dụ, người sử dụng thể đồng bộ
hóa các thiết lập hệ điều hành, cài đặt phần mềm các tài nguyên khác giữa
lOMoARcPSD|208990 13
Chương trình chat client-server
các máy tính khác nhau để giảm thời gian công sức cho việc quản các h
thống máy tính.
-
Tăng khả năng bảo mật cho máy tính: VMware cũng cung cấp các công cụ
giải pháp bảo mật cho phép người sử dụng bảo vệ máy tính và các tài nguyên.
Các công cụ này giúp ngăn chặn các cuộc tấn công từ mạng ngăn ngừa sự
tạo ra các lỗ hổng bảo mật trên hệ thống máy tính.
-
Hỗ trợ các hệ điều hành khác nhau: Bạn thsử dụng VMware trên Macbook
để hỗ trợ cài đặt thêm Windows chạy song song, tiết kiệm thời gian và công sức
cho việc cài đặt và quản lý hệ thống.
14
lOMoARcPSD|208990 13
CHƯƠNG 2. TRIỂN KHAI
2.1 Demo chương trình
Hình 9. Cấu trúc thư mục
lOMoARcPSD|208990 13
Chương trình chat client-server
Hình 10. Màn hình đăng nhập
Hình 11. Màn hình tin nhắn
16
lOMoARcPSD|208990 13
Chương trình chat client-server
Hình 12. Ghi log tin nhắn
Hình 13. Database
lOMoARcPSD|208990 13
Chương trình chat client-server
KT LUN HƯỚNG PHÁT TRIN
I. Kết quả đạt được
-
Bản thân tích lũy được kinh nghiệm trong việc lập trình hệ thống với linux.
-
Xây dựng được 1 chương trình chat
Bên cạnh đó còn một số hạn chế như:
-
Giao diện chưa được bắt mắt với người dùng.
-
Chương trình chưa kiểm tra hết các trường hợp thể xảy ra.
II. Hướng phát triển
Đồ án của chúng em vẫn còn những hạn chế nên chúng em đưa ra những hướng
nghiên cứu phát triển trong tương lai như sau:
-
Nghiên cứu hơn nữa về lập trình C++ trên Linux.
-
Phát triển thêm về độ phức tạp cho chương trình
18
lOMoARcPSD|208990 13
Chương trình chat client-server
TÀI LIU THAM KHO
[1]. Sách Client/Server Architecture [Tác giả: Alex Berson]
[Link tham khảo: https://bom.so/fGsxCs]
[2]. Sách Network Warrior [Tác giả: Gary A.Donahue]
[Link tham khảo: https://bom.so/Nis0Z2]
[3]. Trang website Stack OverFollow [online] [https://stackoverflow.com/]
[4]. Mẫu báo cáo đồ án cơ sở 4- Khoa Công nghệ Thông tin Truyền thông
[online],[http://sict.udn.vn/tai-nguyen/]
[5]. AdminLTE [online], [https://adminlte.io/]
| 1/28

Preview text:

lOMoARcPSD|208 990 13
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN MÔN HỌC LẬP TRÌNH HỆ THỐNG ĐỀ TÀI:
SỬ DỤNG SOCKET ĐỂ XÂY DỰNG CHƯƠNG
TRÌNH CHAT THEO MÔ HÌNH CLIENT -SERVER TRONG IPC
Sinh viên thực hiện : TỪ CÔNG MINH TRẦN CÔNG TIẾN NGUYỄN HỒNG SƠN NGUYỄN THỊ THANH VÂN
HOÀNG THỊ DIÊU HƯƠNG Lớp : 21KIT || 21JIT
Giảng viên hướng dẫn : TS.NGUYỄN HỮU NHẬT MINH lOMoARcPSD|208 990 13
Đà Nẵng, tháng 12 năm 2023 lOMoARcPSD|208 990 13
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN MÔN HỌC LẬP TRÌNH HỆ THỐNG ĐỀ TÀI:
SỬ DỤNG SOCKET ĐỂ XÂY DỰNG CHƯƠNG
TRÌNH CHAT THEO MÔ HÌNH CLIENT -SERVER TRONG IPC
Sinh viên thực hiện : TỪ CÔNG MINH TRẦN CÔNG TIẾN NGUYỄN HỒNG SƠN NGUYỄN THỊ THANH VÂN
HOÀNG THỊ DIÊU HƯƠNG Lớp : 21KIT || 21JIT
Giảng viên hướng dẫn : TS.NGUYỄN HỮU NHẬT MINH
Đà Nẵng, tháng 12 năm 2023 lOMoARcPSD|208 990 13
Chương trình chat client-server LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn chân thành đến các thầy cô trong trường đã
dạy em những kiến thức hay, và các thầy cô trong bộ môn đã truyền đạt những kiến
thức chuyên ngành bổ ích cũng như các kỹ năng trong cuộc sống. Giúp cho chúng em
trưởng thành hơn trong quá trình làm đồ án môn học.
Đặc biệt, em xin cảm ơn sâu sắc tới giáo viên hướng dẫn TS.Nguyễn Hữu Nhật
Minh - Giảng viên khoa Khoa học máy tính, Trường Đại học Công nghệ Thông tin &
Truyền thông Việt Hàn - Đại học Đà Nẵng đã tận tình hướng dẫn chu đáo, góp ý theo
sát giúp em có thể hoàn thành đồ án tốt nhất.
Trong quá trình thực hiện đề tài nghiên cứu, bản thân chúng em đã cố gắng nỗ lực,
tuy nhiênkhông tránh khỏi sai sót. Chúng em mong nhận được sự góp ý của thầy cô
giáo, và từ phía hội đồng để đề tài nghiên cứu của chúng em được hoàn thiện hơn. Xin chân thành cảm ơn! lOMoARcPSD|208 990 13
Chương trình chat client-server
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
......................................................................................................................................... ii lOMoARcPSD|208 990 13
Chương trình chat client-server MỤC LỤC
LỜI CẢM ƠN ............................................................................................................. i
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ........................................................ ii MỤC LỤC iii
DANH MỤC HÌNH ẢNH .......................................................................................... v
DANH MỤC CÁC TỪ VIẾT TẮT .......................................................................... vi MỞ ĐẦU 1
I. Lý do chọn đề tài ..................................................................................................... 1
II. Mục tiêu của đề tài ................................................................................................. 1
III. Nội dung chính ..................................................................................................... 1
IV. Kết quả .................................................................................................................. 1
V. Bố cục báo cáo ........................................................................................................ 2
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT .......................................................................... 3
1.1 Sơ lược về lập trình hệ thống ............................................................................ 3
1.1.1 Khái niệm ......................................................................................................... 3
1.1.2 Tổng quan lập trình hệ thống ............................................................................. 3
1.2 Tìm hiểu về truyền thông giữa các tuyến trình – Interprocess
Communication.......................................................................................................... 4

1.2.1 Khái niệm Process và IPC ................................................................................. 4
1.2.2 Vì sao các process phải giao tiếp với nhau ......................................................... 7
1.2.3 Shared Memory-Trao đổi bằng phân đoạn nhớ chung........................................ 7
1.2.4 Một số cơ chế giao tiếp giữa các process trong Linux .......................................... 8
1.3 Lập trình Socket trên ........................................................................................ 8
1.3.1 Mô hình client-server ........................................................................................ 8
1.3.2 Sơ lược về Socket ............................................................................................. 8
1.3.3 Minh họa lập trình socket ................................................................................ 10
1.4 Ngôn ngữ lập trình và các tools ...................................................................... 10
1.4.1 C++ ................................................................................................................. 11 lOMoARcPSD|208 990 13
Chương trình chat client-server
1.4.2 Vmware .......................................................................................................... 13
CHƯƠNG 2. TRIỂN KHAI .................................................................................... 15
2.1 Demo chương trình ............................................................................................ 15
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ............................................................... 18
I. Kết quả đạt được ................................................................................................... 18
II. Hướng phát triển ................................................................................................. 18
TÀI LIỆU THAM KHẢO ....................................................................................... 19 iv lOMoARcPSD|208 990 13
Chương trình chat client-server DANH MỤC HÌNH ẢNH
Hình 1. Sơ lược về lập trình hệ thống ........................................................................... 3
Hình 2. Quy trình ......................................................................................................... 6
Hình 3. Share Memory ................................................................................................. 7
Hình 4. Sơ đồ Stream sockets ..................................................................................... 9
Hình 5. Sơ đồ Datagram Socket ................................................................................. 10
Hình 6. C++ ............................................................................................................... 11
Hình 7. Ưu điểm của ngôn ngữ lập trình C++ ............................................................ 12
Hình 8. Logo VMWare .............................................................................................. 13
Hình 9. Cấu trúc thư mục ........................................................................................... 15
Hình 10. Màn hình đăng nhập .................................................................................... 16
Hình 11. Màn hình tin nhắn ....................................................................................... 16
Hình 12. Ghi log tin nhắn........................................................................................... 17
Hình 13. Database...................................................................................................... 17 lOMoARcPSD|208 990 13
Chương trình chat client-server
DANH MỤC CÁC TỪ VIẾT TẮT STT Viết tắt Cụm từ 1 CNPM Công nghệ phần mềm 2 CNTT Công nghệ thông tin 3 5E
Engagement, Exploration, Explanation, Elaboration, Evaluation vi lOMoARcPSD|208 990 13 MỞ ĐẦU
I. Lý do chọn đề tài
Hiện nay, với sự phát triển của công nghệ thông tin và mạng internet, việc giao
tiếp qua chat trở nên phổ biến và cần thiết hơn bao giờ hết. Việc tìm hiểu và xây dựng
một ứng dụng chat client-server giúp chúng ta hiểu rõ hơn về cách thức hoạt động của
các ứng dụng chat thực tế và có thể áp dụng kiến thức này vào các dự án thực tế khác.
Xây dựng ứng dụng chat client-server là một dự án phù hợp để học và nghiên cứu
về mạng máy tính, giao thức truyền thông, mã hóa và bảo mật dữ liệu. Đề tài này cung
cấp cơ hội để làm việc với các khái niệm và công nghệ quan trọng trong lĩnh vực mạng và bảo mật.
Tóm lại, xây dựng một chương trình chat client-server không chỉ giúp chúng ta
hiểu rõ hơn về cách thức hoạt động của các ứng dụng chat, mà còn cung cấp cơ hội để
học hỏi và phát triển kỹ năng lập trình, hiểu về mạng và bảo mật thông tin.
II. Mục tiêu của đề tài
- Xây dựng giao diện đơn giản nhưng chi tiết giúp người dùng chat với nhau
- Xây dựng được chương trình chat cục bộ và toàn cục III. Nội dung chính
- Tìm hiều, ứng dụng các ngôn ngữ lập trình vào thiết kế ứng dụng (C++).
- Tìm hiểu về hiểu giao thức TCP/IP
- Tìm hiểu về mô hình client-server
- Tìm hiểu về lập trình Socket trên Linux
- Tìm hiểu về Shared memory IV. Kết quả
- Xây dựng thành công chương trình chat theo mô hình client-server.
- Có thể tự vận dụng lại các kiến đã được học.
- Với quy mô ứng dụng vừa và nhỏ, cộng thêm thời gian không cho phép nên đề
tài “Xây dựng chương trình chat theo mô hình client-server” có thể chưa có đầy
đủ các chức năng hoàn thiện của một ứng dụng chat. Trong quá trình làm còn
nhều sai sót, do kiến thức có hạn chết còn ít nhiều thiếu sót về việc hiển thị lOMoARcPSD|208 990 13
Chương trình chat client-server
cũng như tối ưu thuật toán, thời gian thực hiện. Cũng như giao diện chưa được
thân thiện với người dùng. Một số lỗi còn xảy ra trong lúc chạy chương trình.
Trong tương lai chúng tôi sẽ cố gắng khắc phục những sai sót này.
V. Bố cục báo cáo
- Các phần của báo cáo được chia ra thành các chương như sau:
- Chương 1: Cơ sở lý thuyết
- Gồm các cơ sở lý thuyết về các đối tượng được nhắm đến - Chương 2: Triển khai
- Cuối cùng là sẽ là các phần như: kết luân, hướng phát triển và danh mục tài liệu tham khảo 2 lOMoARcPSD|208 990 13 CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.1 Sơ lược về lập trình hệ thống
1.1.1 Khái niệm
Lập trình hệ thống là quá trình phát triển phần mềm hệ thống. So với lập trình
ứng dụng, lập trình hệ thống tập trung vào việc tạo ra phần mềm cung cấp dịch vụ cho
phần cứng máy tính. Mục tiêu của lập trình hệ thống là tạo ra những phần mềm hỗ trợ
hoạt động và quản lý của hệ thống máy tính.
Hình 1. Sơ lược về lập trình hệ thống
Lập trình hệ thống đòi hỏi một sự hiểu biết sâu về phần cứng máy tính. Nhà lập
trình hệ thống cần phải nắm vững kiến thức về kiến trúc hệ thống, hệ điều hành, quản
lý tài nguyên và các khái niệm cơ bản của lập trình.
Các nhiệm vụ của lập trình hệ thống có thể bao gồm:
- Quản lý tài nguyên: Lập trình hệ thống liên quan đến việc quản lý và phân phối tài
nguyên phần cứng, như bộ nhớ, CPU, đĩa cứng và mạng. Điều này bao gồm việc
tối ưu hóa việc sử dụng tài nguyên và đảm bảo tính hiệu quả và đáng tin cậy của hệ thống.
- Quản lý quá trình: Lập trình hệ thống đảm nhiệm việc quản lý các quá trình, bao
gồm tạo, kết thúc, lập lịch thực thi và quản lý bộ nhớ.
- Giao tiếp với phần cứng: Lập trình hệ thống liên quan đến việc giao tiếp và điều
khiển các thiết bị phần cứng như bàn phím, chuột, máy in, đầu đĩa và các thiết bị ngoại vi khác.
Lập trình hệ thống đóng vai trò quan trọng trong việc xây dựng các hệ thống
phức tạp như hệ thống điều khiển, máy chủ, hệ thống nhúng và các ứng dụng yêu cầu
hiệu năng cao và tương tác trực tiếp với phần cứng.
1.1.2 Tổng quan lập trình hệ thống
Những điểm đặc biệt hơn trong lập trình hệ thống: lOMoARcPSD|208 990 13
Chương trình chat client-server
- Những nhà lập trình sẽ tạo những gánh vác về phần cứng và một số thuộc tính
kháccủa những chương trình chạy trên hệ thống đó, và sẽ thường khai thác
những thuộc tính đó (choví dụ bởi việc sử dụng một giải thuật mà được biết mà
hiệu quả khi nào được sử dụng với phầncứng đặc biệt).
- Thông thường một ngôn ngữ lập trình cấp thấp hoặc tiếng địa phương ngôn ngữ
lậptrình sử dụng đó là:
• Có thể hoạt động trong những môi trường tài nguyên bắt buộc.
• Là rất hiệu quả và có thể thực hiện một ít ở trên đầu.
• Có một thư viện thực hiện nhỏ, hoặc không ở mọi thứ.
• Cho phép trực tiếp và “thô” mà điều khiển qua truy cập bộ nhớ và điều khiểnchảy tràn.
• Để cho người lập trình viết những phần của chương trình ngay tức khắc trên ngôn ngữ assembly.
Những nhà lập trình hệ thống một cách đầy đủ thì khác với lập trình ứng dụng
mà những ngườilập trình hướng tới chuyên về một hoặc cái khác.
Trong lập trình hệ thống, những phương tiện lập trình có hạn thường sẵn có. Sự
sử dụng của tập hợp rác tự động thì không phải là phổ biến và gỡ rối là không đổi đôi
khi để làm. Thư việnthực hiện, nếu sẵn có ở mọi nơi, thì ít mạnh hơn nhiều thông
thường, và làm ít sợ kiểm tra lỗi hơn. Bởi vì những sự hạn chế đó, màn hình và sự
đăng ký thường được sử dụng; những hệ điềuhành có thể có vô cùng chi tiết hóa
những hệ thống con đăng ký.Thực hiện những phần nhất định trong Hệ điều hành và
những quy định hoạt động mạng những nhà lập trình hệ thống (cho ví dụ thi hành phân
trang (bộ nhớ ảo) hoặc một trình điều khiểnthiết bị cho một hệ điều hành).
1.2 Tìm hiểu về truyền thông giữa các tuyến trình – Interprocess Communication
1.2.1 Khái niệm Process và IPC
- Inter-process communication (IPC) là một cơ chế cho phép trao đổi dữ liệu giữa
các quá trình.Bằng cách cung cấp một người dùng với một tập hợp các giao diện
lập trình, IPC giúp một lậptrình tổ chức thực hiện hoạt động giữa các quá trình 4 lOMoARcPSD|208 990 13
Chương trình chat client-server
khác nhau. IPC cho phép một ứng dụng để kiểm soát một ứng dụng khác, do đó
cho phép chia sẻ dữ liệu mà không cần can thiệp
- Một quy trình là một chuỗi chương trình đang chạy cùng với tất cả các tài nguyên
mà mã của nó có thể ảnh hưởng (còn được gọi là bối cảnh quy trình). Bối cảnh của
quy trình bao gồm trạng thái quy trình, hình ảnh của mã máy thực thi tương ứng
với chương trình, bộ nhớ được phân bổ, bộ mô tả tài nguyên được quy trình sử
dụng như bộ mô tả hoặc trình xử lý tệp, các thuộc tính bảo mật như chủ sở hữu quy
trình và quyền của quy trình, và cuối cùng, nhưng không kém phần quan trọng,
trạng thái bộ xử lý như nội dung của các thanh ghi và địa chỉ bộ nhớ vật lý. Trạng
thái tiến trình thể hiện trạng thái của tiến trình liên quan đến việc sử dụng thời gian
của bộ xử lý. Một tiến trình có thể ở một trong ba trạng thái:
• Đang chạy - Tiến trình đang sử dụng CPU (nó đã được phân bổ thời gian xử lý
và mã máy của tiến trình được bộ xử lý thực thi về mặt vật lý).
• Bị chặn - Quá trình không thể chạy cho đến khi một số sự kiện bên ngoài xảy ra
(ví dụ: dữ liệu được nhận từ mạng). CPU có thể rảnh trong thời gian này nếu
không có tiến trình hiện có nào sẵn sàng để chạy.
• Ready (Runnable) - Tiến trình đã sẵn sàng để chạy (không phải đợi sự kiện nào
xảy ra), nhưng nó được hệ điều hành tạm dừng để cho các tiến trình khác chạy trên cùng CPU.
- Hình 1.2 trình bày bằng đồ họa các chuyển đổi trạng thái xảy ra trong vòng đời của
một quy trình. Tùy thuộc vào thuật toán lập lịch của hệ điều hành và đặc thù của
quy trình (ứng dụng người dùng), trạng thái của quy trình sẽ dao động định kỳ giữa
ba trạng thái được mô tả trong hình. Hình 1.2 minh họa tất cả các chuyển đổi trạng
thái có thể xảy ra trong các tình huống sau:
• Transition 1 - Xảy ra khi một tiến trình không thể tiếp tục vì nó đang chờ một
sự kiện bên ngoài nào đó. Ví dụ: khi một tiến trình bắt đầu kết nối đến máy chủ,
tiến trình đó sẽ bị chặn cho đến khi máy chủ phản hồi.
• Chuyển tiếp 2 - Gây ra bởi bộ lập lịch tiến trình khi nó quyết định tạm dừng
việc thực thi tiến trình hiện tại và cho một tiến trình khác có cơ hội chạy. Quá lOMoARcPSD|208 990 13
Chương trình chat client-server
trình bị gián đoạn và trạng thái của nó được lưu lại để tiếp tục hoạt động từ
cùng thời điểm mà nó bị gián đoạn mà không bị gián đoạn.
• Chuyển tiếp 3 - Gây ra bởi bộ lập lịch quy trình khi nó quyết định cho một quy
trình sẵn sàng có cơ hội chạy. Chuyển tiếp 2 và 3 về cơ bản đang tạo ra ảo giác
về việc xử lý song song.
Hình 2. Quy trình
• Chuyển tiếp 4—Xảy ra khi xảy ra sự kiện bên ngoài mà quá trình bị chặn đang
chờ đợi (chẳng hạn như sự xuất hiện của một số thông báo đầu vào). Quá trình
chuyển đổi này thường được kích hoạt bởi tín hiệu gián đoạn bộ xử lý được tạo
bởi thiết bị ngoại vi I/O tương ứng hoặc giao diện mạng.
- Khi nhiều tiến trình ở trạng thái SẴN SÀNG, hệ điều hành phải quyết định tiến
trình nào trong số chúng sẽ chạy trước. Nó sử dụng thuật toán lập lịch để xác định
các quy trình sẽ được phân bổ thời gian xử lý và theo thứ tự nào. Các thuật toán lập
kế hoạch, như được mô tả bằng đồ họa trong Hình. 1.3, đồng thời xác định thời
điểm dừng một tiến trình và dành thời gian cho CPU cho một tiến trình khác. Các
thuật toán lập lịch có thể thực hiện việc này một cách tự nguyện (“lập lịch không
ưu tiên”) hoặc bắt buộc (“lập lịch ưu tiên”). Lập lịch không ưu tiên liên quan đến
việc các tiến trình sẵn sàng từ bỏ thời gian của bộ xử lý để cho phép các tiến trình
khác chạy. Điều này thường xảy ra khi tiến trình hiện đang chạy phải chuyển sang
trạng thái BLOCKED, trong khi chờ sự kiện bên ngoài. Khi lập lịch ưu tiên được
sử dụng, quy trình hiện đang chạy sẽ bị buộc vào trạng thái SẴN SÀNG để cho 6 lOMoARcPSD|208 990 13
Chương trình chat client-server
phép các quy trình khác chạy. Lập lịch ưu tiên có thể được thực hiện theo chính sách lập lịch.
1.2.2 Vì sao các process phải giao tiếp với nhau
Việc cho phép truyền data giữa các process là do những lý do sau:
- Giúp chia sẻ thông tin giữa các users.
- Giúp speech up các tác vụ trong máy tính. - Giúp xây dựng modun.
- Giúp thuận tiện trong chạy nhiều tác vụ cùng một lúc.
1.2.3 Shared Memory-Trao đổi bằng phân đoạn nhớ chung
Shared memory (bộ nhớ được chia sẻ) là cơ chế giao tiếp liên tiến trình (IPC) có
sẵn trong Linux và các hệ thống giống Unix khác, khi một bộ nhớ chung được sử dụng
cho hai hoặc nhiều tiến trình khác nhau.
Trong các cơ chế giao tiếp giữa các tiến trình khác như các pipe (đường ống) hay
message queue (hàng đợi tin nhắn), cần thực hiện các bước gửi dữ liệu từ tiến trình
này sang trình khác. Tuy nhiên, đối với shared memory, không có bất kỳ hành vi
truyền dữ liệu nào cần phải thực hiện ở đây cả, các tiến trình đều có thể truy cập vào
bộ nhớ chung. Và giao tiếp được thực hiện thông qua bộ nhớ được chia sẻ này, nơi các
thay đổi được thực hiện bởi một tiến trình có thể được xem bởi tiến trình khác.
Hình 3. Share Memory lOMoARcPSD|208 990 13
Chương trình chat client-server
Ở đây, các tiến trình chia sẻ một vùng nhớ vật lý thông qua trung gian không gian
địa chỉ của chúng. Một vùng nhớ chia sẻ tồn tại độc lập với các tiến trình, và khi một
tiến trình muốn truy xuất đến vùng nhớ này, tiến trình phải kết gắn vùng nhớ chung đó
vào không gian địa chỉ riêng của từng tiến trình, và thao tác trên đó như một vùng nhớ riêng của mình.
1.2.4 Một số cơ chế giao tiếp giữa các process trong Linux
Linux cung cấp một số cơ chế giao tiếp giữa các tiến trình gọi là IPC (Inter- ProcessCommunication):
• Signals handling - Trao đổi bằng tín hiệu.
• Pipe -Trao đổi bằng cơ chế đường ống.
• Message Queues - Trao đổi thông qua hàng đợi tin nhắn.
• Shared Memory - Trao đổi bằng phân đoạn nhớ chung.
• Giao tiếp thông qua socket.
• Giao tiếp đồng bộ dùng semaphore
1.3 Lập trình Socket trên
1.3.1 Mô hình client-server
- Client – Server là mô hình phổ biến cho giao tiếp giữa 2 tiến trình/2 máy, trong đó,
tiến trìnhclient kết nối đến tiến trình server để yêu cầu trao đổi dữ liệu.
- Client cần biết về sự tồn tại và địa chỉ của tiến trình server, nhưng server không cần
biết về sựtồn tại và địa chỉ của client cho đến khi kết nối được thiết lập.
- Mỗi khi kết nối được thiết lập, cả 2 bên đều có thể trao đổi (gửi và nhận dữ liệu).
- Để thiết lập một kết nối cho cả 2 phía, cần xây dựng một socket. Có thể hiểu socket
như một điểm đầu cuối của kênh kết nối giữa 2 tiến trình.
1.3.2 Sơ lược về Socket
Socket là điểm cuối end-point trong liên kết truyền thông hai chiều (two-way
communication)biểu diễn kết nối giữa Client – Server. Các lớp Socket được ràng buộc
với một cổng port (thểhiện là một con số cụ thể) để các tầng TCP (TCP Layer) có thể
định danh ứng dụng mà dữ liệu sẽ được gửi tới.
Có 2 loại socket được sử dụng rộng rãi là: stream sockets và datagram sockets. 8 lOMoARcPSD|208 990 13
Chương trình chat client-server
- Stream sockets: Dựa trên giao thức TCP (Tranmission Control Protocol), là giao
thức hướngluồng (stream oriented). Việc truyền dữ liệu chỉ thực hiện giữa 2 tiến
trình đã thiết lập kết nối.Giao thức này đảm bảo dữ liệu được truyền đến nơi nhận
một cách đáng tin cậy, đúng thứ tựnhờ vào cơ chế quản lý luồng lưu thông trên
mạng và cơ chế chống tắc nghẽn.
Hình 4. Sơ đồ Stream sockets
- Datagram sockets: Dựa trên giao thức UDP (User Datagram Protocol), là giao thức
hướngthông điệp (message oriented). Việc truyền dữ liệu không yêu cầu có sự thiết
lập kết nối giữatiến quá trình. Ngược lại với giao thức TCP thì dữ liệu được truyền
theo giao thức UDP khôngđược tin cậy, có thế không đúng trình tự và lặp lại. Tuy
nhiên vì nó không yêu cầu thiết lập kếtnối không phải có những cơ chế phức tạp
nên tốc độ nhanh… ứng dụng cho các ứng dụng truyền dữ liệu nhanh như chat, game….. lOMoARcPSD|208 990 13
Chương trình chat client-server
Hình 5. Sơ đồ Datagram Socket
1.3.3 Minh họa lập trình socket
Mô hình lập trình socket TCP giữa 2 tiến trình client và server như sau:
- Các bước thiết lập một socket phía client gồm:
+ Tạo một socket bằng hàm socket().
+ Kết nối socket đến địa chỉ của server bằng hàm connect().
+ Gửi và nhận dữ liệu: Có một số cách khác nhau, đơn giản nhất là sử
dụng các hàmread() và write().
+ Đóng kết nối bằng hàm close().
- Các bước thiết lập một socket phía server gồm:
+ Tạo một socket bằng hàm socket()+ Gắn (bind) socket đến địa chỉ của
server sử dụng hàm bind(). Đối với server trêninternet địa chỉ bao gồm
địa chỉ ip của máy host + số hiệu cổng dịch vụ (port number).
+ Lắng nghe (listen) các kết nối đến từ clients sử dụng hàm listen().
+ Chấp nhận các kết nối sử dụng hàm accept(). Hàm này sẽ dừng (block)
cho đến khinhận được một client kết nối đến.
+ Gửi và nhận dữ liệu với client (hàm read(), write()).
+ Đóng kết nối bằng hàm close()
1.4 Ngôn ngữ lập trình và các tools 10 lOMoARcPSD|208 990 13
Chương trình chat client-server
1.4.1 C++ Hình 6. C++
- C++ là một ngôn ngữ lập trình được phát triển vào năm 1979 tại phòng thí nghiệm
Bell bởi Bjarne Stroustrup. Đây được gọi là ngôn ngữ bậc trung (middle-level) và
là một phần mở rộng của ngôn ngữ lập trình C hoặc “C với các lớp Class” vì C++
là sự kết hợp các tính năng của ngôn ngữ cấp cao và cấp thấp.
- Ngôn ngữ lập trình này có thể chạy trên nhiều nền tảng khác nhau như: Windows,
macOS và Unix. Từ những thập niên 1990, C++ đã trở thành một trong những
ngôn ngữ thương mại được ưa thích của các lập trình viên. Theo thời gian nó đã
mở rộng đáng kể và hiện nay có nhiều tính năng như: lập trình tổng quát, lập trình
thủ tục, lập trình hướng đối tượng,...
Lý do C++ trở thành ngôn ngữ tiềm năng?
Để biết vì sao C++ là ngôn ngữ tiềm năng thì chúng ta không thể bỏ qua những điểm mạnh nổi bật như:
- Tính phổ biến: Lập trình viên C++ là một trong những công việc được các nhà
tuyển dụng trên toàn cầu tìm kiếm nhiều. Điều này có thể cho thấy C++ là một
trong những ngôn ngữ lập trình phổ biến nhất trên thế giới.
- Dễ hiểu và dễ sử dụng: C++ được biết đến là ngôn ngữ lập trình đơn giản nhất.
Lập trình này hoạt động theo nguyên tắc phân nhỏ các nhiệm vụ lớn thành các
nhiệm vụ nhỏ cho bất kỳ dự án nào. Cấu trúc câu lệnh dễ hiểu, ít từ khóa nên
khá dễ học và dễ sử dụng.
- Thư viện đa dạng, phong phú: có nhiều tài nguyên hỗ trợ cho ngôn ngữ này như
đồ họa API, 2D, 3D, vật lý các thiết bị âm… giúp cho các lập trình viên dễ thực thi. lOMoARcPSD|208 990 13
Chương trình chat client-server
- Đa mô hình: C++ cũng cho phép bạn lập trình theo cấu trúc tuyến tính, hướng
chức năng, hướng đối tượng đa dạng tùy theo yêu cầu của người lập trình.
- Tính di động cao: một đoạn mã code C++ có thể chuyển đổi dễ dàng khi chạy
trong macOS, Window hay Linux. Nhờ đó mà lập trình viên không phải tốn
thời gian viết lại chương trình khi sử dụng nó để chạy trên nhiều platform khác nhau.
- Có nhiều công cụ, phần mềm và IDE hỗ trợ giúp bạn đơn giản hóa công việc.
- Chính vì sở hữu nhiều ưu điểm mà C++ đáng để học trong những ngôn ngữ lập
trình. C++ cơ bản là nền tảng định hướng cho việc tiếp cận sau này với các
ngôn ngữ lập trình khác.
Hình 7. Ưu điểm của ngôn ngữ lập trình C++ 12 lOMoARcPSD|208 990 13
Chương trình chat client-server
1.4.2 Vmware
Hình 8. Logo VMWare
- VMware là một phần mềm máy chủ ảo có chức năng như một hệ thống máy
tính ảo với đầy đủ CPU, bộ nhớ, bộ lưu trữ riêng. Máy ảo được tạo trên một hệ
thống phần cứng vật lý máy chủ và cho phép người dùng chạy các hệ điều
hành, các ứng dụng khác trên chúng.
- Phần mềm VMware Workstation được phát hành bởi công ty VMware, cho
phép người dùng tạo và sử dụng trực tiếp máy ảo trên laptop hoặc PC và
chuyển đổi dễ dàng giữa máy ảo.
Chức năng chính của VMware là gì?
- Tạo và quản lý các máy ảo: VMware cung cấp các công cụ và giải pháp cho
phép người sử dụng tạo và quản lý các máy ảo trên máy tính của họ. Các máy
ảo này giống như các máy tính thực tế, cho phép người sử dụng chạy các hệ
điều hành và các ứng dụng khác trên chúng.
- Quản lý các máy tính trong môi trường doanh nghiệp: Công cụ sẽ có các tính
năng hỗ trợ người quản trị IT quản lý và theo dõi các máy tính trong môi trường
doanh nghiệp, hỗ trợ người quản trị có thể dễ dàng quản lý và bảo trì các hệ thống máy tính.
- Đồng bộ hóa các môi trường máy tính: Ví dụ, người sử dụng có thể đồng bộ
hóa các thiết lập hệ điều hành, cài đặt phần mềm và các tài nguyên khác giữa lOMoARcPSD|208 990 13
Chương trình chat client-server
các máy tính khác nhau để giảm thời gian và công sức cho việc quản lý các hệ thống máy tính.
- Tăng khả năng bảo mật cho máy tính: VMware cũng cung cấp các công cụ và
giải pháp bảo mật cho phép người sử dụng bảo vệ máy tính và các tài nguyên.
Các công cụ này giúp ngăn chặn các cuộc tấn công từ mạng và ngăn ngừa sự
tạo ra các lỗ hổng bảo mật trên hệ thống máy tính.
- Hỗ trợ các hệ điều hành khác nhau: Bạn có thể sử dụng VMware trên Macbook
để hỗ trợ cài đặt thêm Windows chạy song song, tiết kiệm thời gian và công sức
cho việc cài đặt và quản lý hệ thống. 14 lOMoARcPSD|208 990 13
CHƯƠNG 2. TRIỂN KHAI
2.1 Demo chương trình
Hình 9. Cấu trúc thư mục lOMoARcPSD|208 990 13
Chương trình chat client-server
Hình 10. Màn hình đăng nhập
Hình 11. Màn hình tin nhắn 16 lOMoARcPSD|208 990 13
Chương trình chat client-server
Hình 12. Ghi log tin nhắn
Hình 13. Database lOMoARcPSD|208 990 13
Chương trình chat client-server
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
I. Kết quả đạt được
- Bản thân tích lũy được kinh nghiệm trong việc lập trình hệ thống với linux.
- Xây dựng được 1 chương trình chat
Bên cạnh đó còn một số hạn chế như:
- Giao diện chưa được bắt mắt với người dùng.
- Chương trình chưa kiểm tra hết các trường hợp có thể xảy ra.
II. Hướng phát triển
Đồ án của chúng em vẫn còn những hạn chế nên chúng em đưa ra những hướng
nghiên cứu phát triển trong tương lai như sau:
- Nghiên cứu kĩ hơn nữa về lập trình C++ trên Linux.
- Phát triển thêm về độ phức tạp cho chương trình 18 lOMoARcPSD|208 990 13
Chương trình chat client-server
TÀI LIỆU THAM KHẢO
[1]. Sách Client/Server Architecture [Tác giả: Alex Berson]
[Link tham khảo: https://bom.so/fGsxCs]
[2]. Sách Network Warrior [Tác giả: Gary A.Donahue]
[Link tham khảo: https://bom.so/Nis0Z2]
[3]. Trang website Stack OverFollow [online] [https://stackoverflow.com/]
[4]. Mẫu báo cáo đồ án cơ sở 4- Khoa Công nghệ Thông tin và Truyền thông
[online],[http://sict.udn.vn/tai-nguyen/]
[5]. AdminLTE [online], [https://adminlte.io/]
Document Outline

  • LỜI CẢM ƠN
  • NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
  • MỤC LỤC
  • DANH MỤC HÌNH ẢNH
  • DANH MỤC CÁC TỪ VIẾT TẮT
  • MỞ ĐẦU
    • 1.1.1 Khái niệm
    • 1.1.2 Tổng quan lập trình hệ thống
    • 1.2.1 Khái niệm Process và IPC
    • 1.2.2 Vì sao các process phải giao tiếp với nhau
    • 1.2.3 Shared Memory-Trao đổi bằng phân đoạn nhớ chung
    • 1.2.4 Một số cơ chế giao tiếp giữa các process trong Linux
    • 1.3.1 Mô hình client-server
    • 1.3.2 Sơ lược về Socket
    • 1.3.3 Minh họa lập trình socket
    • 1.4.1 C++