Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 43

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á


KHOA: CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN


HỌC PHẦN: LẬP TRÌNH MẠNG
ĐỀ TÀI 06: ỨNG DỤNG CHAT GIỮA 2 MÁY UDP
WINDOW FORM

Sinh viên thực hiện Lớp Khóa

Trần Nam Anh DCCCNTT13.10.15 K13

Dương Thành Long DCCCNTT13.10.15 K13

Nguyễn Tiến Nghĩa DCCCNTT13.10.15 K13

Trần Văn Thuận DCCCNTT13.10.15 K13

Bắc Ninh , năm 2024


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á
KHOA: CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN


HỌC PHẦN: LẬP TRÌNH MẠNG

Nhóm 7:
ĐỀ TÀI 06: ỨNG DỤNG CHAT GIỮA 2 MÁY UDP
WINDOW FORM

Điểm
Stt Sinh Viên Thực Hiện Mã Sinh viên Điểm Bằng Chữ
Bằng Số

1 Trần Nam Anh 20222907

2 Dương Thành Long 20222984

3 Nguyễn Tiến Nghĩa 20222843

4 Trần Văn Thuận 20222903

CÁN BỘ CHẤM 1 CÁN BỘ CHẤM 2

(Ký và ghi rõ họ tên) (Ký và ghi rõ họ tên)


Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

MỤC LỤC

MỤC LỤC...........................................................................................................................i
DANH MỤC BẢNG BIỂU VÀ SƠ ĐỒ..........................................................................iii
DANH MỤC CÁC TỪ VIẾT TẮT.................................................................................iv
LỜI MỞ ĐẦU....................................................................................................................v
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI........................................................................1
1.1. Giới thiệu đề tài...........................................................................................................1
1.1.1. Giới thiệu về mạng máy tính..............................................................................1
1.1.2. Địa chỉ IP............................................................................................................2
1.1.3. Cổng (port).........................................................................................................3
1.2. Mô Hình Kết Nối Client - Server...............................................................................4
1.2.1. Nguyên tắc hoạt động.........................................................................................5
1.2.2. Socket.................................................................................................................6
1.2.3. Stream.................................................................................................................8
1.2.4. Thread.................................................................................................................8
1.2.5. Lập trình soc ket với UDP..................................................................................9
Các bước cơ bản để lập trình socket UDP:..................................................................9
1.2.6. Lập trình soc ket với TCP................................................................................10
1.2.7. Các class: thuộc tính, phương thức..................................................................11
1.2.8. Các bước xây dựng ứng dụng (server làm gì? Client làm gì)..........................12
1.2.9. Ví dụ về giao tiếp bằng Console......................................................................13
1.3. Phân công công việc..................................................................................................17
Chương 2: Xây dựng ứng dụng Server/Client..............................................................18
2.1. Bài toán......................................................................................................................18
2.1.1. Mô tả yêu cầu bài toán.....................................................................................18
2.1.2. Mô hình thực hiện............................................................................................19
2.2. Phân tích thiết kế ứng dụng.....................................................................................20
2.2.1. Sơ đồ cấu trúc hệ thống....................................................................................20
2.2.2. Biểu đồ use-case...............................................................................................21
2.2.3. Biểu đồ hoạt động............................................................................................22
2.2.4. Biểu đồ lớp.......................................................................................................22

i
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

2.2.5. Thiết kế giao diện.............................................................................................23


Chương 3: Kết quả thực nghiệm chương trình............................................................25
3.1. Yêu cầu cài đặt ứng dụng.........................................................................................25
3.1.1. Yêu cầu cấu hình máy tính...............................................................................25
3.1.2. Yêu cầu phần mềm...........................................................................................25
3.1.3. Yêu cầu hệ điều hành.......................................................................................26
3.2. Kết quả ứng dụng.....................................................................................................27
3.2.1. Mô tả dữ liệu input/output................................................................................27
3.2.2. Chụp hình kết quả............................................................................................32
KẾT LUẬN......................................................................................................................35
Kết quả đạt được.............................................................................................................35
DANH MỤC TÀI LIỆU THAM KHẢO.......................................................................36

ii
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

DANH MỤC BẢNG BIỂU VÀ SƠ ĐỒ

Số hiệu Tên Trang

Mô hình mạng
1.1 1

Mô hình kết nối clients server


1.2.1 5

1.2.2 Nguyên tắc hoạt động mô hình clients server 6

Bảng 1 Bảng phân công công việc 17


Mô hình thực hiện
2.1.1 19
Sơ đồ cấu trúc hệ thống ứng dụng
2.2.1 20
Biểu đồ use-case
2.2.2 21

2.2.3 Biểu đồ hoạt động 22

2.2.4 Biểu đồ lớp 22

2.2.5 Giao diện Client 23

2.2.6 Giao diện Client 24

iii
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

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

STT Từ Viết Tắt Giải Thích

1 HTTP Hypertext Transfer Protocol

2 UDP User Datagram Protocol

3 TCP Transmission Control Protocol

4 DNS Domain Name System

iv
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

LỜI MỞ ĐẦU
Lập trình mạng là một lĩnh vực quan trọng trong ngành công nghệ thông tin và
đóng vai trò quan trọng trong việc xây dựng các ứng dụng và hệ thống mạng hiệu quả.
Môn học lập trình mạng cung cấp kiến thức và kỹ năng cần thiết để hiểu và triển khai các
ứng dụng mạng phức tạp, liên lạc giữa các thiết bị và truyền tải dữ liệu qua mạng.
Trong khóa học lập trình mạng, chúng ta sẽ khám phá các khái niệm, giao thức và
công nghệ quan trọng liên quan đến mạng, bao gồm mô hình OSI, giao thức TCP/IP, lập
trình socket, giao thức HTTP, Web Services và nhiều khía cạnh khác. Chúng ta sẽ tìm
hiểu cách xây dựng các ứng dụng mạng đơn giản và phức tạp sử dụng các ngôn ngữ lập
trình như C#, Java, Python và các công nghệ web.
Lập trình mạng yêu cầu kiến thức về cách mạng hoạt động và cách sử dụng các
giao thức để truyền thông và trao đổi dữ liệu giữa các thiết bị. Chúng ta sẽ tìm hiểu về
cấu trúc dữ liệu gói tin, địa chỉ IP, cổng, giao thức TCP và UDP, và các khái niệm quan
trọng khác để xây dựng các ứng dụng mạng ổn định và tin cậy.
Trong quá trình học, chúng ta sẽ thực hiện các bài tập và dự án thực tế để áp dụng
kiến thức đã học vào việc xây dựng các ứng dụng thực tế. Chúng ta cũng sẽ khám phá
các vấn đề phổ biến trong lập trình mạng như độ trễ mạng, bảo mật mạng và tối ưu hóa
hiệu suất.
Lập trình mạng không chỉ giúp chúng ta hiểu về cách hoạt động của mạng, mà còn
mở ra rất nhiều cơ hội nghề nghiệp. Công việc liên quan đến lập trình mạng có thể làm
việc trong các công ty phần mềm, công ty mạng, công ty dịch vụ Internet, và nhiều lĩnh
vực khác. Việc hiểu và có kỹ năng lập trình mạng sẽ là một lợi thế lớn cho sự phát triển
nghề nghiệp trong thế giới kỹ thuật ngày nay.
Ngày nay, việc phát triển hay xây dựng các ứng dụng và nền tảng chatting hiện
đang được phổ biến rộng rãi. Chatting được hiểu đơn giản là hành động trao đổi thông tin
giữa các dạng, giưã người hoặc nhóm người, từ máy này sang máy kia cùng lúc, bằng bàn
phím hơn là thiết bị chuyển âm. Vậy nên, trong bài này chúng tôi sẽ đưa ra cho các bạn
một ứng dụng chat sử dung giao thức Udp.

v
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI

1.1. Giới thiệu đề tài


1.1.1. Giới thiệu về mạng máy tính
Mạng máy tính là một tập hợp các máy tính được kết nối với nhau bởi đường truyền
theo một cấu trúc nào đó và thông qua đó các máy tính trao đổi thông tin qua lại cho
nhau.

Đường truyền là hệ thống các thiết bị truyền dẫn có dây hay không dây dùng để
chuyển các tín hiệu điện tử từ máy tính này đến máy tính khác. Các tín hiệu điện tử
đó biểu thị các giá trị dữ liệu dưới dạng các xung nhị phân (on - off). Tất cả các tín
hiệu được truyền giữa các máy tính đều thuộc một dạng sóng điện từ. Tùy theo tần số
của sóng điện từ có thể dùng các đường truyền vật lý khác nhau để truyền các tín
hiệu. Ở đây đường truyền được kết nói có thể là dây cáp đồng trục, cáp xoắn, cáp
quang, dây điện thoại, sóng vô tuyến.... Các đường truyền dữ liêu tạo nên cấu trúc
của mạng. Hai khái niệm đường truyền và cấu trúc là những đặc trưng cơ bản của
mạng máy tính.

Hình 1.1.Mô hình mạng

1
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Cấu trúc và phân loại: Mạng máy tính có thể được phân loại dựa trên quy mô, kiến
trúc và mục đích sử dụng. Các loại mạng phổ biến bao gồm mạng LAN (Local Area
Network), mạng WAN (Wide Area Network), mạng WLAN (Wireless Local Area
Network), và mạng Internet.

Các thành phần chính: Một mạng máy tính bao gồm các thành phần như máy tính,
thiết bị mạng (như router và switch), phần mềm điều khiển mạng, cáp và kết nối không
dây.

Giao thức và chuẩn truyền thông: Để truyền dữ liệu qua mạng, các giao thức và
chuẩn truyền thông như TCP/IP, Ethernet, Wi-Fi, và DNS được sử dụng. Chúng đảm
bảo rằng thông tin có thể được truyền qua mạng một cách hiệu quả và an toàn.

Bảo mật mạng: Bảo mật mạng là một phần quan trọng của mạng máy tính, bao gồm
các biện pháp bảo vệ dữ liệu khỏi các mối đe dọa như tin tặc, virus và tấn công mạng.

Quản lý và vận hành: Quản lý mạng bao gồm cài đặt, cấu hình, giám sát và bảo trì
mạng máy tính. Việc này đảm bảo rằng mạng hoạt động một cách hiệu quả và đáng tin
cậy.

Mạng máy tính chơi một vai trò quan trọng trong việc kết nối thế giới kỹ thuật số
của chúng ta. Từ việc gửi email đến truy cập vào các trang web, mạng máy tính là nền
tảng cơ bản cho mọi hoạt động trực tuyến và truyền thông hiện đại.

1.1.2. Địa chỉ IP


Địa chỉ IP (Internet Protocol Address) là một định danh số được gán cho mỗi thiết
bị trong mạng máy tính. Nó cho phép thiết bị này được xác định và liên lạc với các
thiết bị khác trên mạng. Địa chỉ IP thường được biểu diễn dưới dạng các số được phân
cách bằng dấu chấm, ví dụ: 192.168.1.1.

2
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Có hai loại địa chỉ IP chính:

* IPv4 (Internet Protocol version 4):


Địa chỉ IP dạng này được sử dụng rộng rãi trên Internet và trong các mạng nội
bộ. Nó bao gồm một chuỗi 32 bit, được chia thành bốn nhóm 8 bit, và mỗi nhóm được
biểu diễn bằng một số từ 0 đến 255. Ví dụ: 192.168.1.1.

* IPv6 (Internet Protocol version 6):


Với sự tăng của số lượng thiết bị kết nối vào Internet, IPv6 đã được phát triển
để đáp ứng nhu cầu đó. Địa chỉ IPv6 sử dụng 128 bit, mở ra một không gian địa chỉ
lớn hơn rất nhiều so với IPv4. Nó được biểu diễn bằng một chuỗi hexadecimals, ví dụ:
2001:0db8:85a3:0000:0000:8a2e:0370:7334.

Địa chỉ IP cho phép các thiết bị giao tiếp trực tiếp trên Internet và trong các
mạng nội bộ, giúp định danh và định tuyến dữ liệu đến đúng đích.

1.1.3. Cổng (port)


Port là giao thức bit 16 đứng đầu (chèn vào phần đầu header) của mỗi gói tin trong
giao thức TCP, UDP hay còn gọi là cổng port, nơi quy định các tập dữ liệu riêng biệt.
Port là một dạng thuật toán đã được định sẵn và mỗi máy tính cần phải có thì mới có
thể nhận và gửi các gói tin đi được. Khi hoạt động Port cũng được quy đổi giống với
số bit của bất kì một mã dữ liệu nào đó. Đơn giản thì đây giống như cánh cổng có
quyền cho vào hay không với các dữ liệu muốn ra vào hệ thống máy tính của bạn.
Trong mạng máy tính, "cổng" (port) là một số hiệu chỉnh cụ thể được sử dụng để
xác định dịch vụ hoặc ứng dụng trên một thiết bị mạng cụ thể. Mỗi dịch vụ hoặc ứng
dụng có thể được gán một cổng riêng để giao tiếp qua mạng.

Cổng được xác định bằng một số nguyên từ 0 đến 65535. Trong đó:

 Cổng từ 0 đến 1023 được gọi là "cổng danh sách" (well-known ports) và được
dành cho các dịch vụ chuẩn như HTTP (cổng 80), FTP (cổng 21), SSH (cổng 22),
và nhiều dịch vụ khác.

3
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

 Cổng từ 1024 đến 49151 là "cổng đăng ký" (registered ports), được sử dụng cho
các dịch vụ không thuộc danh sách nhưng được đăng ký và quản lý bởi IANA
(Internet Assigned Numbers Authority).
 Các cổng từ 49152 đến 65535 được gọi là "cổng riêng" (dynamic or private
ports), và được sử dụng cho các kết nối tạm thời.
Khi dữ liệu được gửi từ một thiết bị đến một đích, cổng đích sẽ xác định ứng dụng
hoặc dịch vụ mà dữ liệu sẽ được gửi tới trên thiết bị đích. Trong cơ chế TCP/IP, mỗi
gói dữ liệu bao gồm thông tin về cổng nguồn và cổng đích, giúp các thiết bị mạng biết
cách định tuyến dữ liệu.

1.2. Mô Hình Kết Nối Client - Server

Hình 1.2.1: Mô hình kết nối clients server

Mô hình client - server là mô hình giúp các máy tính giao tiếp truyền tải dữ liệu
cho nhau. Nhắc đến Client với Server thì đây là 2 từ khóa khá phổ biến và ai cũng biết.
Và mình cũng nhắc lại tóm tắt về client - server.

Client và server về bản chất thì nó là 2 máy tính giao tiếp và truyền tải dữ liệu cho
nhau.

4
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Máy tính đóng vai trò là máy khách - Client: Với vai trò là máy khách, chúng
sẽ không cung cấp tài nguyên đến các máy tính khác mà chỉ sử dụng tài nguyên được
cung cấp từ máy chủ. Một client trong mô hình này có thể là một server cho mô hình
khác, tùy thuộc vào nhu cầu sử dụng của người dùng.

Máy tính đóng vai trò là máy chủ - Server: Là máy tính có khả năng cung cấp
tài nguyên và các dịch vụ đến các máy khách khác trong hệ thống mạng. Server đóng
vai trò hỗ trợ cho các hoạt động trên máy khách client diễn ra hiệu quả hơn.

Và mô hình client-server này được rộng rãi nhất nên trong bài viết này sẽ đi tìm hiểu
về mô hình client-server.

Mô hình Client Server là mô hình mạng máy tính trong đó các máy tính con
được đóng vai trò như một máy khách, chúng làm nhiệm vụ gửi yêu cầu đến các máy
chủ. Để máy chủ xử lý yêu cầu và trả kết quả về cho máy khách đó.

1.2.1. Nguyên tắc hoạt động


Trong mô hình Client Server, server chấp nhận tất cả các yêu cầu hợp lệ từ mọi
nơi khác nhau trên Internet, sau đó trả kết quả về máy tính đã gửi yêu cầu đó

Máy tính được coi là máy khách khi chúng làm nhiệm vụ gửi yêu cầu đến các
máy chủ và đợi câu trả lời được gửi về.

Hình 1.2.2: nguyên tắc hoạt động mô hình clients server

5
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Để máy khách và máy chủ có thể giao tiếp được với nhau thì giữa chúng phải
có một chuẩn nhất định, và chuẩn đó được gọi là giao thức. (Giao thức là gì thì các bạn
có thể tham khảo tại đây) Một số giao thức được sử dụng phổ biến hiện nay như:
HTTPS, TCP/IP, FTP,...
Nếu máy khách muốn lấy được thông tin từ máy chủ, chúng phải tuân theo một
giao thức mà máy chủ đó đưa ra. Nếu yêu cầu đó được chấp nhận thì máy chủ sẽ thu
thập thông tin và trả về kết quả cho máy khách yêu cầu. Bởi vì Server - máy chủ luôn
luôn trong trạng thái sẵn sàng để nhận request từ client nên chỉ cần client gửi yêu cầu
tín hiệu và chấp nhận yêu cầu đó thì server sẽ trả kết quả về phía client trong thời gian
ngắn nhất.

1.2.2. Socket
Socket được coi là một cổng giao tiếp giữa các ứng dụng trên mạng. Nó cho
phép các thiết bị trao đổi thông tin với nhau thông qua một kết nối định sẵn. Socket
thường được sử dụng trong các ứng dụng như trò chuyện trực tuyến, chia sẻ tệp tin,
chia sẻ dữ liệu giữa các máy tính trên mạng.
Socket cho phép giao tiếp giữa hai quy trình khác nhau trên cùng một máy hoặc
các máy khác nhau. Nói chính xác hơn, đó là một cách để giao tiếp với các máy tính
bằng cách sử dụng các mô tả tệp Unix tiêu chuẩn. Trong Unix, mọi hành động I / O
được thực hiện bằng cách viết hoặc đọc một mô tả tệp. Mô tả tệp chỉ là một số nguyên
được liên kết với một tệp đang mở và nó có thể là kết nối mạng, tệp văn bản, thiết bị
đầu cuối hoặc thứ gì khác.
Đối với một lập trình viên, một socket hoạt động giống như một bộ mô tả tệp
cấp thấp. Điều này là do các lệnh như read() và write() hoạt động với các socket giống
như cách chúng làm với các tập tin và đường dẫn.
Thông qua giao diện này chúng ta có thể lập trình ñiều khiển việc truyền thông
giữa hai máy sử dụng các giao thức mức thấp là TCP, UDP…
Socket là sự trừu tượng hoá ở mức cao, có thể tưởng tượng nó như là thiết bị truyền
thông hai chiều gửi – nhận dữ liệu giữa hai máy tính với nhau.

Các loại Socket

6
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

- Socket hướng kết nối (TCP Socket)


- Socket không hướng kết nối (UDP Socket)
- Raw Socket
Đặc ñiểm của Socket hướng kết nối :
- Có 1 ñường kết nối ảo giữa 2 tiến trình
- Một trong 2 tiến trình phải ñợi tiến trình kia yêu cầu kết nối.
- Có thể sử dụng ñể liên lạc theo mô hình Client/Server
- Trong mô hình Client/Server thì Server lắng nghe và chấp nhận một yêu cầu
kết nối
- Mỗi thông điệp gửi đều có xác nhận trở về
- Các gói tin chuyển ñi tuần tự

Đặc ñiểm của Socket không hướng kết nối :


- Hai tiến trình liên lạc với nhau không kết nối trực tiếp
- Thông ñiệp gửi ñi phải kèm theo ñịa chỉ của người nhận
- Thông ñiệp có thể gửi nhiều lần
- Người gửi không chắc chắn thông ñiệp tới tay người nhận
- Thông ñiệp gửi sau có thể ñến ñích trước thông ñiệp gửi trước ñó.

Số hiệu cổng của Socket 10:


- Để có thể thực hiện các cuộc giao tiếp, một trong hai quá trình phải công
- bố số hiệu cổng của socket mà mình sử dụng.
- Mỗi cổng giao tiếp thể hiện một ñịa chỉ xác ñịnh trong hệ thống. Khi quá
- trình ñược gán một số hiệu cổng, nó có thể nhận dữ liệu gởi ñến cổng
- này từ các quá trình khác.

- Quá trình còn lại cũng yêu cầu tạo ra một socket.

7
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

1.2.3. Stream
Stream là một class mô phỏng một dòng các byte được sắp hàng một cách liên
tiếp nhau.
Khi truyền dữ liệu trên mạng, các dữ liệu truyền đi là dòng các byte liên tiếp
nhau từ byte đầu tiên cho tới các byte cuối cùng.
Stream là một class cơ sở, các luồng (stream) khác mở rộng từ class này.
Có một vài class đã được xây dựng sẵn trong C#, chúng mở rộng từ lớp Stream
cho các mục đích khác nhau

Trong đề tài này, MemoryStream là lớp class mà nhóm em lựa chọn

MemoryStream là một lớp trong .NET Framework và .NET Core được sử dụng để
làm việc với dữ liệu như một luồng (stream) trong bộ nhớ. Nó cho phép bạn đọc và ghi
dữ liệu vào bộ nhớ nhưng không cần tới một tệp vật lý.

 Lưu trữ dữ liệu trong bộ nhớ: MemoryStream lưu trữ dữ liệu vào một mảng byte
trong bộ nhớ, thay vì lưu vào một tệp vật lý như các luồng (streams) thông thường.

 Có thể đọc và ghi dữ liệu: Bạn có thể sử dụng MemoryStream để đọc dữ liệu từ một
mảng byte hoặc ghi dữ liệu vào mảng byte đó.

 Hỗ trợ các thao tác chuẩn với luồng (stream): MemoryStream hỗ trợ các thao tác như
đọc, ghi, đặt vị trí con trỏ, đọc từng byte, ghi từng byte và các thao tác khác tương
tự như các luồng (streams) khác.

 Tiện lợi cho việc làm việc tạm thời với dữ liệu: Thường được sử dụng trong các
trường hợp bạn cần xử lý dữ liệu tạm thời, thực hiện các thao tác như xử lý tệp tin
trong bộ nhớ mà không cần lưu vào ổ đĩa.

1.2.4. Thread
"Thread" (luồng) là một khái niệm quan trọng đề cập đến quá trình thực thi
đồng thời của các phần của chương trình. Một "thread" là một luồng độc lập trong một
quy trình chương trình chính. Mỗi "thread" có thể thực hiện các tác vụ khác nhau đồng
thời, giúp cải thiện hiệu suất và đáp ứng của chương trình.
Các đặc điểm chính của "thread" trong lập trình bao gồm:
8
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

- Độc lập: Mỗi "thread" hoạt động độc lập với các "thread" khác, có thể thực hiện
các tác vụ riêng biệt.

- Đồng thời: Các "thread" có thể chạy đồng thời với nhau, giúp tăng tốc độ thực thi
của chương trình.
- Chia sẻ tài nguyên: Các "thread" trong cùng một quy trình có thể chia sẻ tài nguyên
như bộ nhớ và các biến toàn cục.
- Quản lý và đồng bộ hóa: Để đảm bảo tính nhất quán và an toàn của dữ liệu, các
"thread" cần được quản lý và đồng bộ hóa một cách cẩn thận.

Trong đề tài sử dụng Thread Listen: "Thread listen" trong ngữ cảnh lập trình
thường đề cập đến việc sử dụng các luồng (threads) để lắng nghe (listen) và xử lý các
kết nối từ các client trong mô hình lập trình mạng.

1.2.5. Lập trình soc ket với UDP

Lập trình UDP (User Datagram Protocol) liên quan đến việc phát triển ứng
dụng sử dụng giao thức UDP để truyền thông dữ liệu qua mạng. UDP là một trong hai
giao thức chính của Internet Protocol Suite (IP), cùng với TCP (Transmission Control
Protocol).UDP là một giao thức gửi dữ liệu qua mạng mà không cần thiết lập kết nối
trước (connectionless), không đảm bảo tính chắc chắn (unreliable) và không bảo đảm
thứ tự dữ liệu (unordered).

Các bước cơ bản để lập trình socket UDP:

- Khởi tạo socket: Sử dụng hàm socket() để tạo socket. Trong lập trình socket
UDP, sử dụng thư viện socket tương ứng trong ngôn ngữ lập trình như socket
trong Python, DatagramSocket trong Java, socket() trong C/C++.
- Gửi dữ liệu: Sử dụng hàm sendto() hoặc tương đương để gửi dữ liệu từ một
socket UDP đến địa chỉ và cổng mong muốn.
- Nhận dữ liệu: Sử dụng hàm recvfrom() hoặc tương đương để nhận dữ liệu từ
một socket UDP và biết được địa chỉ và cổng của người gửi.
- Đóng kết nối: Sau khi hoàn thành, đóng socket bằng cách sử dụng hàm close()
hoặc tương đương để giải phóng tài nguyên.
9
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

1.2.6. Lập trình soc ket với TCP

Giao thức TCP (Transmission Control Protocol) là một trong những giao thức
mạng cơ bản và quan trọng nhất trong bộ giao thức TCP/IP. TCP cung cấp một kết nối
đáng tin cậy, có kiểm soát luồng và đảm bảo giao tiếp giữa các ứng dụng trên mạng.

Lập trình Socket trong TCP bao gồm các bước sau:

- Tạo Socket: Ứng dụng tạo một Socket, đại diện cho một điểm cuối của kết nối
mạng. Trong TCP, đây là một điểm cuối của một kết nối đáng tin cậy.
- Liên kết Socket: Socket được liên kết với một địa chỉ IP và số cổng cụ thể. Địa
chỉ IP và số cổng xác định duy nhất vị trí của ứng dụng trên mạng.
- Lắng nghe kết nối: Ứng dụng server lắng nghe các kết nối đến trên Socket đã
liên kết. Khi có yêu cầu kết nối, Socket server sẽ chấp nhận kết nối.
- Kết nối Socket: Ứng dụng client tạo kết nối tới Socket server bằng cách khởi
tạo kết nối TCP.
- Gửi và nhận dữ liệu: Sau khi kết nối được thiết lập, ứng dụng client và server
có thể gửi và nhận dữ liệu qua Socket.
- Đóng kết nối: Khi hoàn tất trao đổi dữ liệu, ứng dụng client và server đóng kết
nối Socket.
- Trong TCP, các Socket hoạt động theo mô hình client-server. Ứng dụng server
lắng nghe các kết nối đến, trong khi ứng dụng client khởi tạo kết nối tới server.

TCP cung cấp các tính năng như:

- Kết nối đáng tin cậy: Đảm bảo dữ liệu được chuyển giao đầy đủ và đúng thứ tự.
- Kiểm soát luồng: Điều chỉnh tốc độ truyền dữ liệu để tránh quá tải mạng.
- Xác nhận và retransmission: Đảm bảo rằng dữ liệu được chuyển giao thành
công.
- Lập trình Socket TCP cung cấp các phương thức và lớp trong các ngôn ngữ lập
trình như C#, Java, Python, v.v. để xây dựng ứng dụng mạng sử dụng giao thức
TCP.

10
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

1.2.7. Các class: thuộc tính, phương thức


a), Sever
Class Sever

Thuộc tính:

- clientList: Một danh sách các IPEndPoint của các máy khách đã kết nối.

- IP: Địa chỉ và cổng của server (được khởi tạo với địa chỉ IP bất kì
(IPAddress.Any() và cổng port 9999).

- server: Một đối tượng UdpClient để nhận và gửi dữ liệu qua UDP.

- Thread listen: Một luồng để lắng nghe các kết nối từ các máy khách.

Phươnng thức :

- Phương thức connect() dùng để khởi tạo các biến và cài đặt để lắng nghe kết nối từ
các máy khách sử dụng giao thức UDP.

- Phương thức Receive để xử lý việc nhận dữ liệu từ client, ví dụ như hiển thị tin
nhắn trên giao diện máy chủ, xử lý yêu cầu từ client, vv.

- void Send(IPEndPoint clientEndPoint): Gửi dữ liệu đến một IPEndPoint cụ thể


(máy khách).
- void SendTo(string message, IPEndPoint clientEndPoint): Gửi dữ liệu dưới
dạng chuỗi đến một IPEndPoint cụ thể (máy khách).
- void AddMassage(string s): Thêm tin nhắn vào khung chat.
- byte[] Serialize(object obj): Phân mảnh một đối tượng thành mảng byte.
- object Deserialize(byte[] data): Gom mảnh một mảng byte thành đối tượng
b), Client
Class Client

Thuộc tính:

- serverEndPoint: Địa chỉ IP và cổng của server (trong trường hợp này là
127.0.0.1:9999).

11
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

- localEndPoint: Địa chỉ IP và cổng của client để nhận các tin nhắn từ server
(IPAddress.Any để nhận từ bất kỳ IP nào, cổng 0 để hệ thống tự động chọn cổng).
- remoteEndPoint: Địa chỉ IP và cổng của server từ đó dữ liệu được nhận.
- receiveThread: Luồng để nhận dữ liệu từ máy chủ.

Phương thức :

- Connect(): Phương thức để kết nối tới máy chủ với địa chỉ IP và cổng đã cho.
Phương thức này trả về true nếu kết nối thành công và false nếu có lỗi.

- Receive(): Phương thức để nhận dữ liệu từ máy chủ và kích hoạt sự kiện
MessageReceived khi nhận được tin nhắn.

- Send(string message): Phương thức gửi dữ liệu tới máy chủ.

- AddMassage(message): Thêm tin nhắn vào danh sách tin nhắn hiển thị trên giao diện.

- Serialize(object obj): Chuyển đối tượng thành mảng byte.

- Deserialize(byte[] data): Chuyển mảng byte thành đối tượng.

1.2.8. Các bước xây dựng ứng dụng (server làm gì? Client làm gì)

Triển khai trên máy chủ Sever :

- Khởi tạo Socket: Tạo một đối tượng Socket để lắng nghe và nhận dữ liệu từ các
client.

- Bắt đầu lắng nghe dữ liệu: Với giao thức UDP, không có kết nối được duy trì, máy
chủ chỉ cần lắng nghe các gói tin gửi đến từ client.

- Nhận và xử lý dữ liệu: Mỗi khi nhận được gói tin từ client, máy chủ sẽ xử lý dữ liệu
và gửi lại cho tất cả các client khác (nếu cần).

- Gửi dữ liệu đến client: Nếu có yêu cầu từ client, máy chủ có thể gửi dữ liệu đến một
client cụ thể thông qua địa chỉ IP và cổng của client đó.

Triển khai phía máy khách (Client):

- Khởi tạo Socket: Tạo một đối tượng Socket để gửi và nhận dữ liệu.

12
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

- Gửi dữ liệu đến máy chủ: Client sẽ gửi các gói tin dữ liệu chứa các tin nhắn tới máy
chủ thông qua socket.

- Nhận dữ liệu từ máy chủ: Client sẽ nhận các gói tin từ máy chủ và xử lý dữ liệu nhận
được.

- Hiển thị tin nhắn và tương tác với người dùng: Dữ liệu nhận được từ máy chủ sẽ
được hiển thị trên giao diện người dùng của client và người dùng có thể nhập tin nhắn
để gửi tới máy chủ.

1.2.9. Ví dụ về giao tiếp bằng Console

a), Sever.cs
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class UdpServer


{
private const int Port = 9999;
private UdpClient server;
private IPEndPoint clientEP;

public UdpServer()
{
server = new UdpClient(Port);
}
public void Start()
{
Console.WriteLine("Server started. Waiting for messages...");
clientEP = new IPEndPoint(IPAddress.Any, 0);
while (true)

13
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

{
byte[] data = server.Receive(ref clientEP);
string message = Encoding.UTF8.GetString(data);
Console.WriteLine($"Client ({clientEP}) sent: {message}");
}
}
public void Stop()
{
server.Close();
}
}
class Program
{
static void Main(string[] args)
{
UdpServer udpServer = new UdpServer();
try
{
udpServer.Start();
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
finally
{
udpServer.Stop();
}
}
}

14
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

b), Client.cs
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class UdpClient


{
private const int Port = 9999;
private UdpClient client;
private IPEndPoint serverEP;

public UdpClient()
{
client = new UdpClient();
serverEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), Port);
}
public void Start()
{
Console.WriteLine("Client started. Type 'exit' to quit.");
while (true)
{
Console.Write("Enter message: ");
string message = Console.ReadLine();
if (message.ToLower() == "exit")
break;

byte[] data = Encoding.UTF8.GetBytes(message);


client.Send(data, data.Length, serverEP);
}
client.Close();
}
}
15
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

class Program
{
static void Main(string[] args)
{
UdpClient udpClient = new UdpClient();

try
{
udpClient.Start();
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}

16
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

1.3. Phân công công việc.

Bảng 1. Bảng phân công công việc

Công việc
ST
Tên đầu việc chia đến nhỏ Thành Viên Đánh giá Kết luận
T
nhất

Bao quát tổng thể


Đạt yêu cầu
1 Trưởng Nhóm về kế thực hiện, Trần Văn Thuận
đề ra
tiến độ , nội dung

Phân Tích Thiết Hiểu được phần Đạt yêu cầu


2 Nguyễn Tiến Nghĩa
Kế nghiệp vụ đề ra

Hiểu được cấu


trúc chương trình,
thuật toán và câu Đạt yêu cầu
3 Lập Trình Trần Nam Anh
đề ra
lệnh lập trình

Kịch bản tets,


làm báo cáo Đạt yêu cầu
4 Test Dương Thành Long
đề ra
Input  Hệ
thống  output

17
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Chương 2: Xây dựng ứng dụng Server/Client

2.1. Bài toán


2.1.1. Mô tả yêu cầu bài toán
 Dự án : Xây dựng ứng dụng chat giữa hai máy UDP Windows Form

a), Thiết lập máy chủ (Server)

- Máy chủ được chạy trên một máy tính có địa chỉ IP cố định và cổng UDP được
chỉ định.

- Máy chủ lắng nghe các yêu cầu kết nối từ máy khách và sẵn sàng tiếp nhận tin
nhắn từ chúng.

b), Thiết lập máy khách (Client)

- Mỗi máy khách được chạy trên một máy tính có địa chỉ IP và cổng UDP.

- Máy khách có thể nhập tin nhắn từ giao diện người dùng và gửi chúng đến máy
chủ.

c), Quá trình truyền tin nhắn

- Client 1 tạo một gói tin UDP chứa tin nhắn và địa chỉ IP và cổng của máy chủ.

- Gói tin UDP được gửi từ client 1 đến máy chủ qua mạng.

- Máy chủ Server nhận gói tin UDP từ client 1 và trích xuất tin nhắn từ nó.

- Máy chủ Server nhận được tin nhắn và sau đó gửi phản hồi lại cho bằng cách
tạo một gói tin UDP mới chứa tin nhắn và địa chỉ IP và cổng của client 1.

- Gói tin UDP mới được gửi từ máy chủ đến client 1 qua mạng.

- Client 1 nhận gói tin UDP từ máy chủ và trích xuất tin nhắn từ nó.

18
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

2.1.2. Mô hình thực hiện

Hình 2.1.1. Mô hình thực hiện

19
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

2.2. Phân tích thiết kế ứng dụng


2.2.1. Sơ đồ cấu trúc hệ thống

Hình 2.2.1. Sơ đồ cấu trúc hệ thống ứng dụng

20
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

2.2.2. Biểu đồ use-case

Hình 2.2.2. Biểu đồ use-case

21
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

2.2.3. Biểu đồ hoạt động

Hình 2.2. Biểu đồ hoạt động

2.2.4. Biểu đồ lớp

Hình 2.2.4. Biểu đồ lớp


22
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

2.2.5. Thiết kế giao diện

Hình 2.2.5. Giao diện Client

a), Mô tả chi tiết giao diện Client:

- Textbox: Cho phép người dùng tạo 1 gói tin với giao thức Udp.

- ListView: Hiển thị dữ liệu từ Textbox khi người dùng gửi cho Server và nhận
dữ liệu từ Server phản hồi lại.

- Nút gửi: Khi ấn nút này thì dữ liệu từ Textbox sẽ được gửi cho máy chủ Server
và ghi dữ liệu vào file Chatlog.txt.

23
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Hình 2.2.6. Giao diện Server

b), Mô tả chi tiết giao diện Server

- Textbox: Nhập dữ liệu dạng text

- ListView: Nhận dữ liệu từ Client gửi đến và hiển thị dữ liệu từ Textbox

- Nút gửi: Khi ấn nút gửi dữ liệu ở ô Textbox sẽ được gửi đến Client và đồng
thời sẽ lưu dữ liệu đó vào file Chatlog.txt

24
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Chương 3: Kết quả thực nghiệm chương trình

3.1. Yêu cầu cài đặt ứng dụng

3.1.1. Yêu cầu cấu hình máy tính


Để chạy ứng dụng chat UDP trên Windows Form, yêu cầu cấu hình máy tính như
sau:

- Hệ điều hành: Windows 7 trở lên (32-bit hoặc 64-bit).


- Bộ xử lý (CPU): Bộ xử lý đơn lõi với tốc độ tối thiểu 1 GHz.
- Bộ nhớ RAM: Tối thiểu 2 GB RAM.
- Ổ đĩa cứng: Tối thiểu 500 MB dung lượng trống.
- Kết nối mạng: Cả hai máy tính cần phải kết nối với cùng một mạng LAN hoặc
internet để có thể gửi và nhận tin nhắn qua giao thức UDP.
- Microsoft .NET Framework: Phiên bản .NET Framework 4.7.2 trở lên.
- Công cụ phát triển: Visual Studio 2019 hoặc Visual Studio 2022.
- Ngoài ra, để chạy ứng dụng, bạn cần phải biên dịch và chạy ứng dụng trên cả
hai máy tính. Máy tính được coi là "server" sẽ chạy phần code server, và máy
tính được coi là "client" sẽ chạy phần code client.

Đảm bảo rằng cấu hình của cả hai máy tính đều đáp ứng các yêu cầu trên để ứng
dụng chat UDP trên Windows Form có thể hoạt động một cách ổn định.

3.1.2. Yêu cầu phần mềm


Để chạy ứng dụng chat UDP trên Windows Form, ngoài các yêu cầu về phần cứng,
cũng cần cài đặt các phần mềm sau:
- Microsoft Visual Studio: Cần cài đặt Visual Studio 2019 hoặc Visual Studio
2022. Visual Studio là công cụ phát triển ứng dụng Windows Form và hỗ trợ
C#, ngôn ngữ được sử dụng trong ứng dụng này.

25
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

- Microsoft .NET Framework: Ứng dụng sử dụng .NET Framework, vì vậy cần
đảm bảo rằng .NET Framework 4.7.2 hoặc phiên bản mới hơn đã được cài đặt
trên cả hai máy tính.
- Trình soạn thảo văn bản: Bạn có thể sử dụng bất kỳ trình soạn thảo văn bản nào
như Notepad, Sublime Text, Visual Studio Code, v.v. để chỉnh sửa mã nguồn
của ứng dụng.
Với việc cài đặt các phần mềm này, bạn sẽ có đủ công cụ để phát triển, biên dịch và
chạy ứng dụng chat UDP trên Windows Form.

3.1.3. Yêu cầu hệ điều hành


Theo yêu cầu cấu hình, ứng dụng chat UDP trên Windows Form có thể chạy trên
các hệ điều hành Windows sau:
- Windows 7: Ứng dụng có thể chạy trên Windows 7 (32-bit hoặc 64-bit).
- Windows 8/8.1: Ứng dụng có thể chạy trên Windows 8 và Windows 8.1 (32-bit
hoặc 64-bit).
- Windows 10: Ứng dụng có thể chạy trên Windows 10 (32-bit hoặc 64-bit).
- Windows 11: Ứng dụng cũng có thể chạy trên Windows 11 (32-bit hoặc 64-bit).
Lưu ý, mặc dù ứng dụng có thể chạy trên các phiên bản Windows nói trên, nhưng nó
được phát triển và kiểm thử với .NET Framework 4.7.2 hoặc phiên bản mới hơn.
Vì vậy, để đảm bảo ứng dụng hoạt động một cách ổn định, cần đảm bảo rằng cả hai
máy tính (máy server và máy client) đều có cài đặt .NET Framework 4.7.2 hoặc phiên
bản mới hơn.
Ngoài ra, cả hai máy tính cũng cần được kết nối với cùng một mạng LAN hoặc
internet để có thể gửi và nhận tin nhắn qua giao thức UDP.
Vì vậy, đối với yêu cầu về hệ điều hành, ứng dụng chat UDP trên Windows Form có
thể chạy trên các phiên bản Windows 7 trở lên, với điều kiện là đáp ứng được các yêu
cầu về phần cứng và phần mềm khác.

26
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

3.2. Kết quả ứng dụng


3.2.1. Mô tả dữ liệu input/output

a), Input/output của Client

- Hàm kết nối tới Server:

- Hàm gửi tin nhắn tới Server

- Thêm tin nhắnn vào Listview

27
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

- Hàm ghi tin nhắn vào file .txt

- Hàm nhận tin nhắn từ Server

28
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

b), Input/output của Server

- Hàm kết nối và nhận dữ liệu từ Client

- Hàm phản hồi lại cho phía Client

29
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

- Hàm ghi dữ liệu vào file

- Hàm thoát kết nối

30
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Sử dụng lớp MemoryStream cho cả Client và Sever để đọc và ghi dữ liệu vào bộ nhớ:

31
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

3.2.2. Chụp hình kết quả


Giao diện Client:

Giao diện server:

32
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Client gửi tin nhắn tới Server:

Server nhận được và gửi lại cho Client:

33
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

Ghi dữ liệu đã được gửi vào file Chatlog.txt

34
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

KẾT LUẬN

Kết quả đạt được

Thiết kế và triển khai ứng dụng chat đơn giản: Nhóm đã thiết kế và triển khai
một ứng dụng chat đơn giản cho phép giao tiếp giữa hai máy server và client. Ứng
dụng cho phép người dùng gửi và nhận tin nhắn qua giao thức UDP Socket.

Giao diện người dùng thân thiện: Nhóm đã thiết kế giao diện người dùng đơn
giản và thân thiện để người dùng có thể dễ dàng nhập và hiển thị tin nhắn. Giao diện
có thể bao gồm các ô nhập tin nhắn, danh sách tin nhắn đã gửi và nhận, và các chức
năng kết nối và ngắt kết nối.

Xử lý gửi và nhận tin nhắn: Nhóm đã xử lý quá trình gửi và nhận tin nhắn giữa
hai máy server và client bằng cách sử dụng giao thức UDP Socket. Khi người dùng gửi
tin nhắn, ứng dụng sẽ gửi tin nhắn từ client đến server, và server sẽ hiển thị tin nhắn
đó. Tương tự, khi server gửi tin nhắn, client sẽ nhận và hiển thị tin nhắn đó.

Đảm bảo tính toàn vẹn và độ tin cậy: Mặc dù giao thức UDP không đảm bảo
tính toàn vẹn và độ tin cậy của dữ liệu, nhóm có thể đã thực hiện một số biện pháp để
đảm bảo tính toàn vẹn và độ tin cậy như sử dụng các thuật toán checksum, xử lý tin
nhắn trùng lặp hoặc mất mát, hoặc sắp xếp gói tin theo thứ tự.

Kiểm thử và sửa lỗi: Nhóm đã tiến hành kiểm thử và sửa lỗi để đảm bảo ứng
dụng chat hoạt động một cách ổn định và đáng tin cậy. Điều này bao gồm việc xác
định và khắc phục các lỗi liên quan đến kết nối, truyền tải dữ liệu và hiển thị tin nhắn.

Tài liệu và báo cáo: Nhóm có thể đã tạo tài liệu hướng dẫn sử dụng ứng dụng
chat và viết báo cáo về quá trình thiết kế, triển khai và kiểm thử của ứng dụng.

35
Bài Tập Lớn : Lập Trình Mạng GV : Nguyễn Anh Thơ

DANH MỤC TÀI LIỆU THAM KHẢO

[1]. Nguyễn Hồng Sơn (2007), Giáo trình hệ thống Mạng máy tính CCNA
(Semester 1), NXB Lao động xã hội.

[2]. Lương Ánh Hoàng(2010) , Giáo trình lập trình mạng bộ môn kĩ thuật máy tính
Viện công nghệ thông tin và Truyền thông, ĐHBK Hà Nội.

[3]. Ths. Trần Đắc Tốt, Giáo trình Lập trình mạng khoa CNTT, Trường Đại Học
Công Nghệ Thực Phẩm TP.HCM.

36

You might also like