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

37 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

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ả Nguyễn Phước Thịnh, Trần Văn Phúc, Trần Quốc Tù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 Lập trình hệ thống
Thể loại Đồ án môn học
Năm xuất bản 2022
Thành phố Đà Nẵng
Định dạng
Số trang 37
Dung lượng 3,45 MB

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

Nội dung

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀNKHOA KHOA HỌC MÁY TÍNH ĐỒ Á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 THEO MÔ HÌNH CLIENT - SE

Trang 1

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

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 : NGUYỄN PHƯỚC THỊNH

TRẦN VĂN PHÚC TRẦN QUỐC TÙNG Giảng viên hướng dẫn: TS NGUYỄN HỮU NHẬT MINH

Lớp : 20SE2 | 20SE3 | 20SE2

Đà Nẵng, tháng 10 năm 2022

Trang 2

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

Trang 3

LỜI NÓI ĐẦU

Ngày nay, ứng dụng công nghệ thông tin và việc tin học hóa được xem là một trong những yếu

tố mang tính quyết định trong hoạt động của các chính phủ, tổ chức, cũng như của các công ty,

nó đóng vai trò hết sức quan trọng, có thể tạo ra những bước đột phá mạnh mẽ

Cùng với sự phát triển không ngừng về kỹ thuật máy tính và mạng điện tử, công nghệ thông tincũng được những công nghệ có đẳng cấp cao và lần lượt chinh phục hết đỉnh cao này đến đỉnhcao khác Mạng Internet là một trong những sản phẩm có giá trị hết sức lớn lao và ngày càngtrở nên một công cụ không thể thiếu, là nền tảng chính cho sự truyền tải, trao đổi thông tin trêntoàn cầu

Giờ đây, mọi việc liên quan đến thông tin trở nên thật dễ dàng cho người sử dụng: chỉ cần cómột máy tính kết nối internet và một dòng dữ liệu truy tìm thì gần như lập tức… cả thế giới vềvấn đề mà bạn đang quan tâm sẽ hiện ra, có đầy đủ thông tin, hình ảnh và thậm chí đôi lúc có

cả những âm thanh nếu bạn cần… Bằng internet, chúng ta đã thực hiện được nhiều công việcvới tốc độ nhanh hơn và chi phí thấp hơn nhiều so với cách thức truyền thống Chính điều này,

đã thúc đẩy sự khai sinh và phát triển của thương mại điện tử và chính phủ điện tử trên khắpthế giới, làm biến đổi đáng kể bộ mặt văn hóa, nâng cao chất lượng cuộc sống con người

Vì vậy, chúng em đã thực hiện đồ án môn học “SỬ DỤNG SOCKET ĐỂ XÂY DỰNG CHƯƠNG TRÌNH CHAT THEO MÔ HÌNH CLIENT - SERVER TRONG IPC”.

Trang 4

LỜI CẢM ƠN

Chúng em xin gửi lời cảm ơn chân thành tới nhà trường đã tận tình chỉ bảo, góp ý và tạo điềukiện cho em hoàn thành đề tài nghiên cứu Đồ án môn học “Lập trình hệ thống” một cách tốtnhất

Em xin cảm ơn TS Nguyễn Hữu Nhật Minh đã nhiệt tình hướng dẫn em trong quá trình thựchiện báo cáo đề tài nghiên cứu

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

Chúng em xin chân thành cảm ơn!

Đà Nẵng, tháng 10 năm 2022

Trang 5

NHẬN XÉT

(Của giảng viên hướng dẫn)

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

Trang 6

MỤC LỤC

Contents

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

1.1 Sơ lược về lập trình hệ thống 1

1.1.1 Khái niệm lập trình hệ thống 1

1.1.2 Tổng quan lập trình hệ thống 1

1.2 Tìm hiểu về truyền thông giữa các tuyến trình – Interprocess Communication 2

1.2.1 Khái niệm Process và IPC 2

1.2.2 Vì sao các process phải giao tiếp với nhau? 3

1.2.3 Một số cơ chế giao tiếp giữa các process trong Linux 3

1.3 Lập trình Socket trên Linux 3

1.3.1 Mô hình Client/Server 3

1.3.2 Sơ lược về Socket 4

1.3.3 Minh họa lập trình Socket 6

1.4 Tổng quan về công nghệ chính 7

1.4.1 Oracle VM VirtualBox 7

1.4.2 Ngôn ngữ lập trình C 9

CHƯƠNG 2 CHƯƠNG TRÌNH DEMO 12

2.1 Mã nguồn 12

2.1.1 Mã nguồn Server 12

2.1.2 Mã nguồn Client 16

2.2 Demo chương trình 21

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

1 Kết luận 26

Trang 7

2 Hướng phát triển 26 DANH MỤC THAM KHẢO 27

Trang 8

DANH MỤC CÁC BẢNG

Trang 9

DANH MỤC HÌN

Hình 1 – Sơ lược về lập trình hệ thống 1

Hình 2 – Mô hình hoạt động của Stream Sockets 5

Hình 3 – Mô hình hoạt động của Datagram Sockets 6

Hình 4 – Logo VirtualBox 6

Hình 5 – Giao diện VirtualBox 7

Hình 6 – Logo ngôn ngữ lập trình C 8

Hình 7 – Lý do nên sử dụng C 9

Hình 8 – Khởi động Server 17

Hình 9 – Khởi động Client 18

Hình 10 – Chat giữa client và server 19

Hình 11 – Kết thúc trò chuyện 20 Y

Trang 10

DANH MỤC CỤM TỪ VIẾT TẮT

Trang 11

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

lý văn bản), trong khi những nhà lập trình hệ thống nhắm vào việc sản xuất phần mềm mà cungcấp những dịch vụ tới phần cứng máy tính (ví dụ: phần mềm chống phân mảnh đĩa) Nó cũngyêu cầu một độ lớn hơn của sự ý thức 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:

+ 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 đó (cho

ví 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)

1

Trang 12

+ 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ônngữ 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ủatậ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ỗihơ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ữngnhà 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

Một process (tiến trình) là một ví dụ của một chương trình đang chạy Bất cứ khi nào bạn thôngbáo một lệnh trong Linux, nó tạo hoặc bắt đầu một process mới Mỗi process có 1 PID (ProcessID) đại diện PID gồm tối đa 5 chữ số và là duy nhất tại 1 thời điểm PID của process A có thểđược tận dụng cho process B nếu process A đã kết thúc

2

Trang 13

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 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.

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 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 Linux

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

3

Trang 14

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

Các hệ thống (linux, windows) đều cung cấp các hàm hệ thống để thực hiện thiết lập mộtsocket

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

- 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

4

Trang 15

- 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ụngtruyền dữ liệu nhanh như chat, game…

5

Trang 16

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)

6

Trang 17

+ 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())

Oracle VM VirtualBox cho phép bạn thiết lập một hoặc nhiều máy ảo (VM) trên một máy tínhvật lý và sử dụng chúng đồng thời cùng với máy tính vật lý thật Mỗi máy ảo có thể cài đặt vàthực thi hệ điều hành riêng của mình, bao gồm các phiên bản Microsoft Window, Linux, BSD

và MS-DOS Bạn có thể cài đặt và chạy bao nhiêu máy ảo bạn thích cũng được, hạn chế duynhất là dung lượng ổ cứng và bộ nhớ RAM

Lịch sử VirtualBox:

7

Trang 18

+ VirtualBox lần đầu tiên được cung cấp bởi Innotek GmbH từ Weinstadt, Đức, theogiấy phép phần mềm độc quyền, cung cấp một phiên bản sản phẩm miễn phí cho sử dụng cánhân hoặc đánh giá, theo Giấy phép Đánh giá và Sử dụng Cá nhân VirtualBox (PUEL) Vàotháng 1 năm 2007, dựa trên tư vấn của LiSoG, Innotek GmbH đã phát hành VirtualBox OpenSource Edition (OSE) dưới dạng phần mềm miễn phí và nguồn mở.

+ Sun microsystems mua lại Innotek vào năm 2008 Tập đoàn Oracle đã mua lại Sunvào năm 2010 và đổi tên thương hiệu cho sản phẩm là “Oracle VM VirtualBox”

Tính năng VirtualBox:

Hình 5 – Giao diện VirtualBox

+ Miễn phí: Oracle VirtualBox là phần mềm nguồn mở miễn phí

+ Linh động: VirtualBox là nền tảng ảo hóa loại 2 Có nghĩa là máy ảo được tạo trên mộtmáy chủ có thể dễ dàng chạy trên một máy chủ khác bằng cách sử dụng Open VirtualizationFormat (OVF), VM thì có thể export và import dễ dàng

8

Trang 19

+ VM groups: VirtualBox cung cấp tính năng group Tính năng này cho phép nhóm cácmáy ảo mình theo một group để dễ dàng quản lý Các tính năng như start, close, reset, savestate, shutdown, poweroff vừa áp dụng được cho VM riêng lẻ vừa áp dụng được cả cho group.+ Guess additions: Đây là bộ công cụ được cài đặt trên hệ điều hành máy chủ ảo để cảithiện hiệu suất của chúng và để cung cấp tích hợp với VirtualBox cũng như giao tiếp với máychủ.

+ Snapshots: VirtualBox cung cấp tính năng snapshot chụp trạng thái VM Guest Khi cólỗi quá trình lab chẳng hạn bạn có thể quay ngược lại thời điểm ảnh chụp và hoàn nguyên VM.+ Hỗ trợ phần cứng tuyệt vời: VirtualBox hỗ trợ SMP cho Guess, thiết bị USB, hỗ trợfull ACPI, phân giải đa màn hình và boot mạng PXE

1.4.2 Ngôn ngữ lập trình C

Hình 6 – Logo ngôn ngữ lập trình C

Ngôn ngữ C được gọi là “ngôn ngữ mẹ” của ngành IT, bởi chúng được sử dụng như cơ sở, nềntảng chính dành cho những ngôn ngữ khác như: C++, C# & Java Do đó, khi học nhuần nhuyễnngôn ngữ này thì việc chinh phục những ngôn ngữ còn lại sẽ dễ dàng hơn rất nhiều

Ngôn ngữ lập trình C được sử dụng để viết ra những ngôn ngữ lập trình khác như: JVMs,Kernels, C++, C#,… nhằm cung cấp chính xác các khái niệm cốt lõi, xử lý tập tin,… cực kỳ

9

Trang 20

tốt Đồng thời ngôn ngữ lập trình C còn có khả năng tạo ra hệ điều hành, các thiết bị phầncứng, hạt nhân, trình điều khiển,… trên máy tính – thiết bị điện tử vô cùng linh hoạt.

Tại sao nên sử dụng ngôn ngữ C?

Hình 7 – Lý do nên sử dụng C

- Ngôn ngữ C có tính hoạt động độc lập, đảm bảo tính ứng dụng linh hoạt cho ngườidùng nhờ vào khả năng thực thi nhanh chóng bởi các câu lệnh điều khiển & nhiều khái niệmkhác Bên cạnh đó, ngôn ngữ này còn có cấu trúc chia thành nhiều mô-đun nhỏ Người dùng cóthể viết riêng biệt & tạo thành một chương trình C độc lập phục vụ cho quá trình kiểm tra, gỡlỗi & bảo trì website, ứng dụng, hệ thống,… cực tốt

- Trên hết tính năng vận hành của ngôn ngữ C giúp chúng có thể tự mở rộng thông quacác hàm khác nhau Đáp ứng tối ưu nhu cầu sử dụng của người dùng tại nhiều hệ thống,chương trình, ứng dụng,… từ A-Z!

- Hiện nay có rất nhiều phần mềm lập trình ra đời nhằm đáp ứng nhu cầu cho các lậptrình viên Ngoài ra, có nhiều phần mềm giúp việc học và lập trình ngôn ngữ C trở nên dễ dànghơn, có thể kể đến như: Visual Studio Code, CLion, Visual Studio,…

10

Trang 21

11

Trang 22

CHƯƠNG 2 CHƯƠNG TRÌNH DEMO

Trang 23

struct sockaddr_in server , client;

socket_desc = socket(AF_INET , SOCK_STREAM , 0);

server.sin_port = htons( port_number );

if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0) {

printMagenta("~~~ You have entered The Chat Room ~~~\n");

fputs("~~~ You have entered The Chat Room ~~~\n", fp);

listen(socket_desc , 5);

c = sizeof(struct sockaddr_in);

while( (new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) ) { struct connection_t *new_connection = (struct connection_t *) (struct connection *)malloc(

13

Trang 24

void *connection_handler(void *p_connection) {

struct connection_t *connection = (struct connection_t*)p_connection;

int dummy = 0;

pthread_t receiving_thread;

14

Trang 25

if( pthread_create( &receiving_thread , NULL , receiver_handler , (void*) p_connection) >0) {

perror("could not create receving thread");

void *receiver_handler(void *p_connection) {

struct connection_t *connection = (struct connection_t*)p_connection;

int sock = connection->p_sock;

char username[20];

char token[41];

int read_size;

15

Ngày đăng: 24/08/2023, 10:20

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w