LỘ TRÌNH KHÓA HỌC: CHIẾN BINH MẠNG NHÍ

📞 Bài 1: Khái niệm Cổng (Port) và Địa chỉ IP (Bưu điện Internet)

Mục tiêu: Hiểu cách máy tính tìm thấy nhau và chuyển thư đúng phòng.

  • Cách giảng trực quan: * Địa chỉ IP: Giống như địa chỉ của một tòa nhà chung cư (Ví dụ: 192.168.1.5). Có IP là con tìm được đến đúng căn nhà đó.

    • Cổng (Port): Trong tòa nhà có hàng ngàn căn phòng (phòng game, phòng chat, phòng xem phim). Cổng chính là số phòng. Mỗi ứng dụng mạng phải đăng ký một số phòng riêng (Ví dụ: Cổng 80 cho lướt web, cổng 9999 cho phòng chat của hai con) để thư không bị gửi nhầm chỗ.

    • Localhost (127.0.0.1): Mật mã đặc biệt nghĩa là "Chính máy tính này". Chúng ta sẽ dùng nó để tập trận trên cùng một máy trước khi nối mạng thật.

  • Sản phẩm nhỏ: Viết code Python để tự tra cứu Địa chỉ IP của máy tính nhà mình và kiểm tra xem các trang web lớn như Google có IP là gì.

🏛️ Bài 2: Mô hình Chủ - Tách: Người phục vụ (Server) & Khách hàng (Client)

Mục tiêu: Lập trình ra một chương trình Server biết "lắng nghe" và Client biết "gọi điện".

  • Bài toán thực tế: Trên mạng Internet, luôn có một máy đóng vai trò là Server (Người phục vụ - đứng yên một chỗ chờ khách) và một máy là Client (Người mua hàng - chủ động gọi đến).

  • Mô hình bắt tay (Handshake):

    1. Server dùng lệnh .bind() để thuê số phòng, và .listen() để đứng tai lên nghe ngóng.

    2. Client dùng lệnh .connect() để quay số gọi vào IP và Port của Server.

    3. Server bấm nút nghe bằng lệnh .accept(). Hai máy chính thức thông tuyến!

  • Sản phẩm nhỏ: Lập trình file server_lang_nghe.py chạy trước, sau đó bật file client_goi_dien.py lên để thấy hai chương trình độc lập trên máy tính tự kết nối và chào nhau.

💬 Bài 3: Phép thuật Truyền - Nhận dữ liệu (Send & Receive)

Mục tiêu: Gửi thông điệp qua lại và học cách "Mã hóa" chữ.

  • Khái niệm then chốt - Định dạng Byte (bytes): Mạng Internet không hiểu chữ tiếng Việt "Chào con". Nó chỉ hiểu dòng điện $0$ và $1$ (gọi là chuỗi Byte).

    • Khi gửi đi, ta phải Mã hóa (Encode) từ chữ thành Byte: .send(chuoi.encode('utf-8')).

    • Khi nhận về, ta phải Giải mã (Decode) từ Byte thành chữ: .recv(1024).decode('utf-8').

  • Sản phẩm thực hành (Hộp quà may mắn): Client gửi cho Server một con số bất kỳ $\rightarrow$ Server nhận được, tự động tính toán (hoặc chọn một câu chúc may mắn) rồi gửi ngược kết quả về cho Client in ra màn hình.

🚀 Bài 4: Dự án tốt nghiệp — Phòng Chat Zalo Mini 

Mục tiêu: Tạo ra phần mềm tương tác mạng thực tế.

  • Dự án Ứng dụng Chat: Cho phép chúng ta ngồi máy tính này gõ chữ, chữ bay vèo qua màn hình máy tính của người khác và ngược lại (Sử dụng vòng lặp while True để chat liên tục).