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.. Lập trình mạn
TỔNG QUAN VỀ ĐỀ TÀI
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
2 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
3 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
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
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à số hiệu chỉnh định danh các ứng dụng hoặc dịch vụ đang chạy trên một máy tính cụ thể Các cổng này cho phép các ứng dụng giao tiếp với nhau qua mạng, mỗi dịch vụ hoặc ứng dụng có thể được gán một cổng riêng biệt để đảm bảo kết nối chính xác và hiệu quả.
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
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
5 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à cấu trúc mạng máy tính gồm các máy khách và máy chủ Máy khách sẽ gửi yêu cầu xử lý đến máy chủ, và máy chủ sẽ thực hiện xử lý rồi trả kết quả về cho máy khách.
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
6 Để 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
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 quá trình khác nhau giao tiếp với nhau trên cùng một máy hoặc giữa nhiều máy khác nhau Nói cách khác, đây chính là phương thức giao tiếp với máy tính dựa trên miêu tả tệp Unix chuẩn Trong hệ điều hành Unix, mọi hoạt động I/O đều được thực hiện bằng cách ghi hoặc đọc miêu tả tệp Miêu tả tệp đơn giản chỉ là số nguyên có liên kết với tệp đang mở và có thể là kết nối mạng, tập tin văn bản, thiết bị đầu cuối hoặc bất kỳ thứ gì khác Đối với lập trình viên, socket hoạt động tương tự bộ miêu tả tệp cấp thấp bởi lệnh như read() và write() chạy trên socket giống như khi chạy trên tệp 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
7 - 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 đại diện cho một địa chỉ cố định trong hệ thống Khi quy trình được gọi với một số hiệu cổng nhất định, nó có thể nhận dữ liệu được gửi đến cổng này từ các tiến trình khác.
- Quá trình còn lại cũng yêu cầu tạo ra một socket
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 đó
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 chia đến nhỏ nhất
Thành Viên Đánh giá Kết luận
1 Trưởng Nhóm Bao quát tổng thể về kế thực hiện, tiến độ , nội dung
Trần Văn Thuận Đạt yêu cầu đề ra
Hiểu được phần nghiệp vụ Nguyễn Tiến Nghĩa Đạt yêu cầu đề ra
Hiểu được cấu trúc chương trình, thuật toán và câu lệnh lập trình
Trần Nam Anh Đạt yêu cầu đề ra
Kịch bản tets, làm báo cáo
Dương Thành Long Đạt yêu cầu đề ra
Xây dựng ứng dụng Server/Client
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ủ liên tục theo dõi các yêu cầu kết nối từ máy khách và chuẩn bị để nhận tin nhắn từ chúng Ngược lại, mỗi máy khách hoạt động trên một máy tính có địa chỉ IP và cổng UDP được chỉ định.
Máy chủ có thể tiếp nhận tin nhắn từ máy khách thông qua giao diện người dùng Tiếp theo, máy khách sẽ đóng gói tin nhắn thành gói UDP, bao gồm nội dung tin nhắn, địa chỉ IP và cổng của máy chủ đích Gói tin UDP này sau đó được gửi đến máy chủ thông qua mạng.
- 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ó
Hình 2.1.1 Mô hình thực hiện
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
Hình 2.2.2 Biểu đồ use-case
Hình 2.2 Biểu đồ hoạt động
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
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
Kết quả thực nghiệm chương trình
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:
Để bắt đầu phát triển ứng dụng Windows Form, bạn cần cài đặt Microsoft Visual Studio, phiên bản 2019 hoặc 2022 Visual Studio cung cấp môi trường phát triển tích hợp (IDE) và hỗ trợ ngôn ngữ lập trình C#, ngôn ngữ chính được sử dụng trong phát triển ứng dụng Windows Form.
- 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
26 - 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 phải được kết nối với cùng một mạng LAN hoặc Internet Việc kết nối này giúp chúng có thể gửi và nhận tin nhắn qua giao thức UDP Giao thức UDP (User Datagram Protocol) là một giao thức mạng không định hướng kết nối, có nghĩa là nó cho phép truyền dữ liệu giữa các máy tính mà không cần thiết lập kết nối trước.
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
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
28 - Hàm ghi tin nhắn vào file txt
- Hàm nhận tin nhắn từ 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
30 - Hàm ghi dữ liệu vào file
31 Sử dụng lớp MemoryStream cho cả Client và Sever để đọc và ghi dữ liệu vào bộ nhớ:
33 Client gửi tin nhắn tới Server:
Server nhận được và gửi lại cho Client:
34 Ghi dữ liệu đã được gửi vào file Chatlog.txt