1. Trang chủ
  2. » Luận Văn - Báo Cáo

Sử dụng socket Để xây dựng chương trình chat theo mô hình client server trong ipc

27 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Sử Dụng Socket Để Xây Dựng Chương Trình Chat Theo Mô Hình Client -Server Trong IPC
Tác giả 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
Người hướng dẫn TS. Nguyễn Hữu Nhật Minh
Trường học Trường Đại Học Công Nghệ Thông Tin Và Truyền Thông Việt - Hàn
Chuyên ngành Khoa Khoa Học Máy Tính
Thể loại Đồ Án Môn Học
Năm xuất bản 2023
Thành phố Đà Nẵng
Định dạng
Số trang 27
Dung lượng 2,98 MB

Nội dung

Tóm lại, xây dựng một chương trình chat client-server không chỉ giúp chúng tahiể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

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

HOÀNG THỊ DIÊ:U 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

Trang 2

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

HOÀNG THỊ DIÊ:U 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

Trang 3

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ếnthứ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 emtrưở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ậtMinh - 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 ý theosá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!

i

Trang 4

Chương trình chat client-server

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

ii

Trang 5

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

iii

Trang 6

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

Trang 7

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

v

Trang 8

Chương trình chat client-server

DANH MỤC CÁC TỪ VIẾT TẮ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

Trang 9

MỞ ĐẦUI.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 giaotiế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ựngmộ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ủacá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 cungcấ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 tahiể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ònnhề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ị

Trang 10

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 đượcthâ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ụctài liệu tham khảo

2

Trang 11

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ụ chophầ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ậptrì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àinguyên phần cứng, như bộ nhớ, CPU, đĩa cứng và mạng Điều này bao gồm việctố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, baogồ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ềukhiể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ốngphứ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ầuhiệ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:

Trang 12

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ínhkháccủa những chương trình chạy trên hệ thống đó, và sẽ thường khai thácnhữ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ềukhiể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ắctrê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 đôikhi để 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ôngthườ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óanhữ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ântrang (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ữacá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ệnlậ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

Trang 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ủaquy 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 ứngvớ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 quytrì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ạngthá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 giancủ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ếukhô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àoxả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ạytrê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ủamộ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ủaquy 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ạngthá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ừngviệ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á

5

Trang 14

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 quytrì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 đangchờ đợ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ìnhchuyể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ạobở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ếntrì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 địnhcá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ácthuậ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 đếnviệ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ìnhkhá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 sangtrạ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

Trang 15

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ínhsá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ụngcho 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) haymessage 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ìnhnày sang trình khác Tuy nhiên, đối với shared memory, không có bất kỳ hành vitruyề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ácthay đổ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

7

Trang 16

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ộttiế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

- 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 socketnhư 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-waycommunication)biểu diễn kết nối giữa Client – Server Các lớp Socket được ràng buộcvớ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

Trang 17

Chương trình chat client-server

- Stream sockets: Dựa trên giao thức TCP (Tranmission Control Protocol), là giaothức hướngluồng (stream oriented) Việc truyền dữ liệu chỉ thực hiện giữa 2 tiếntrì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ậnmộ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ênmạ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ứchướngthông điệp (message oriented) Việc truyền dữ liệu không yêu cầu có sự thiếtlậ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ềntheo giao thức UDP khôngđược tin cậy, có thế không đúng trình tự và lặp lại Tuynhiê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ạpnên tốc độ nhanh… ứng dụng cho các ứng dụng truyền dữ liệu nhanh như chat,game…

9

Ngày đăng: 20/12/2024, 16:26

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN