Tài liệu ôn tập học phần Lập trình mạng | Trường Đại học Quốc tế, Đại học Quốc gia Thành phố Hồ Chí Minh
-Client gửi yêu cầu: Đầu tiên, máy khách (client) gửi yêu cầu thông qua các thiết bị hỗ trợ mạng. Yêu cầu này có thể là yêu cầu dữ liệu, yêu cầu dịch vụ, hoặc bất kỳ yêu cầu nào khác mà client muốn. Server nhận và xử lý yêu cầu: Máy chủ (server) nhận yêu cầu từ client, sau đó xử lý yêu cầu đó. Server có thể là một máy tính từ xa, có chức năng cung cấp thông tin (dữ liệu) cho một dịch vụ cụ thể hoặc quyền truy cập đối với dịch vụ. Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đón xem.
Trường: Trường Đại học Quốc tế, Đại học Quốc gia Thành phố Hồ Chí Minh
Thông tin:
Tác giả:
Preview text:
ÔN TẬP LẬP TRÌNH MẠNG Chương 1. Những vấn đề cơ bản của lập trình mạng
1. Mô tả các bước trong mô hình Client- Server của dịch vụ Web ( vẽ mô hình và
trình bày chi tiêt các bước)
Dưới đây là các bước chi tiết trong mô hình Client-Server:
-Client gửi yêu cầu: Đầu tiên, máy khách (client) gửi yêu cầu thông qua các thiết bị hỗ
trợ mạng. Yêu cầu này có thể là yêu cầu dữ liệu, yêu cầu dịch vụ, hoặc bất kỳ yêu
cầu nào khác mà client muốn.
-Server nhận và xử lý yêu cầu: Máy chủ (server) nhận yêu cầu từ client, sau đó xử lý
yêu cầu đó. Server có thể là một máy tính từ xa, có chức năng cung cấp thông tin
(dữ liệu) cho một dịch vụ cụ thể hoặc quyền truy cập đối với dịch vụ.
-Server trả kết quả về cho Client: Cuối cùng, sau khi xử lý xong yêu cầu, server sẽ
gửi phản hồi cho client. Phản hồi này có thể là dữ liệu mà client yêu cầu, hoặc là kết
quả của dịch vụ mà client yêu cầu. Mô hình đơn giản mô tả Client-Server:
2. Các hàm IPAddress(), IPHostEntry()
Hàm IPAddress(): Hàm này được sử dụng để tạo một đối tượng IPAddress mới. Đối
tượng này chứa địa chỉ IP của máy tính hoặc máy chủ.
Hàm IPHostEntry(): Hàm này được sử dụng để lấy thông tin về máy chủ từ tên máy
chủ2. Thông tin này bao gồm danh sách các địa chỉ IP của máy chủ
Chương 2. Lập trình Socket hướng kết nối (TCP socket) 1. Giao thức TCP
Giao thức TCP (Transmission Control Protocol) là một giao thức tiêu chuẩn trên Internet
đảm bảo trao đổi thành công các gói dữ liệu giữa các thiết bị qua mạng. TCP là giao
thức truyền tải cơ bản cho nhiều loại ứng dụng, bao gồm máy chủ web và trang web,
ứng dụng email, FTP và các ứng dụng ngang hàng.
TCP hoạt động theo tiến trình bắt tay 3 bước (3 way handshake). Tiến trình này hoạt động như sau:
1.Máy khách gửi cho máy chủ một gói SYN — một yêu cầu kết nối từ port nguồn của nó
đến port đích đến của máy chủ.
2.Máy chủ phản hồi bằng gói SYN/ACK, xác nhận việc nhận được yêu cầu kết nối.
3.Máy khách nhận gói SYN/ACK và trả lời bằng gói ACK của chính nó.
-Sau khi kết nối được thiết lập, TCP hoạt động bằng cách chia nhỏ dữ liệu đã truyền thành
các segment (phân đoạn), mỗi segment được đóng gói thành một gói dữ liệu và được gửi đến đích của nó
2. Mô hình ứng dụng client- server hướng kết nối
3. Các bước cần thiết để xây dựng 1 ứng dụng Client – Server hướng kết nối
Để xây dựng một ứng dụng Client-Server hướng kết nối, bạn cần thực hiện các bước sau đây:
1.Giai đoạn 1 - Server tạo Socket và lắng nghe yêu cầu nối kết:
• socket(): Server yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển.
• bind(): Server yêu cầu gán số hiệu cổng (port) cho socket.
• listen(): Server lắng nghe các yêu cầu nối kết từ các client trên cổng đã được gán.
Giai đoạn 2 - Client tạo Socket và yêu cầu thiết lập một nối kết với Server:
• socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển.
• connect(): Client gửi yêu cầu nối kết đến server có địa chỉ IP và Port xác định.
• accept(): Server chấp nhận nối kết của client, khi đó một kênh giao tiếp ảo được hình
thành, Client và server có thể trao đổi thông tin với nhau thông qua kênh ảo này.
Giai đoạn 3 - Trao đổi thông tin giữa Client và Server: Sau khi chấp nhận yêu cầu nối
kết, server thực hiện lệnh read() và chờ cho đến khi có thông điệp yêu cầu từ client
gửi đến. Server phân tích và thực thi yêu cầu. Kết quả sẽ được gửi về client bằng lệnh
write(). Sau khi gửi yêu cầu bằng lệnh write(), client chờ nhận thông điệp kết quả từ server bằng lệnh read().
Giai đoạn 4 - Kết thúc phiên làm việc: Các câu lệnh read(), write() có thể được thực
hiện nhiều lần. Kênh ảo sẽ bị xóa khi Server hoặc Client đóng socket bằng lệnh close().
4. Các hàm sử dụng phổ biến ( socket(). Bind(), listen(), connect(), accept().
Write(), read(), close(), SendData(), ReceiveData()…)
1.socket(): Hàm này được sử dụng để tạo một socket mới. Nó trả về một mã số socket, hoặc -1 nếu có lỗi.
2.bind(): Hàm này được sử dụng để gắn kết một địa chỉ với một socket đã được tạo. Địa
chỉ này có thể là địa chỉ IP và số cổng.
3.listen(): Hàm này được gọi trên socket của máy chủ để chuyển nó vào chế độ lắng nghe
(listen mode), cho phép máy chủ chấp nhận các kết nối đến từ các client.
4.connect(): Hàm này được sử dụng để kết nối một socket client với một máy chủ đã
được xác định bởi địa chỉ IP và số cổng.
5.accept(): Hàm này được gọi trên socket của máy chủ để chấp nhận một kết nối đến từ
một client. Nó trả về một socket mới để sử dụng cho việc truyền dữ liệu với client này.
6.write() hoặc send(): Hàm này được sử dụng để gửi dữ liệu qua kết nối TCP từ một socket đến socket khác.
7.read() hoặc recv(): Hàm này được sử dụng để đọc dữ liệu từ kết nối TCP vào bộ đệm của socket.
8.close(): Hàm này được sử dụng để đóng một kết nối socket.
9.SendData(): Một hàm tùy chỉnh có thể được tạo ra để đóng gói dữ liệu và gửi nó qua kết nối socket.
10.ReceiveData(): Một hàm tùy chỉnh có thể được tạo ra để nhận dữ liệu từ kết nối socket và xử lý nó.
5. Các trường hợp ngoại lệ, xử lý ngoại lệ và bắt lỗi
Các trường hợp ngoại lệ
1. Socket không thể tạo được
2. Lỗi khi kết nối đến máy chủ
3. Lỗi khi gửi hoặc nhận dữ liệu
4. Timeout khi chờ đợi dữ liệu
5. Kết nối bị đóng bởi đối tác
6. Lỗi cú pháp hoặc định dạng dữ liệu không hợp lệ Các trường hợp xử lý ngoại lệ và bắt lỗi
1. Sử dụng try-catch (hoặc tương đương)
2. Kiểm tra trạng thái trước khi thực hiện hoạt động trên socket
3. Thiết lập cơ chế timeout 4. Ghi nhật ký (logging
5. Xử lý ngoại lệ đặc biệt
6. Đóng socket và giải phóng tài nguyên
Chương 3. Lập trình socket phi kết nối (UDP socket) 1. Giao thức UDP
Giao thức UDP (User Datagram Protocol) là một giao thức cốt lõi của giao thức TCP/IP
được sử dụng để thiết lập các kết nối có độ trễ thấp và giảm mất mát giữa các ứng
dụng trên Internet. UDP cung cấp hai dịch vụ không được cung cấp bởi lớp IP, đó là:
Cung cấp các port number để giúp phân biệt các yêu cầu khác nhau từ người dùng và
sử dụng một thuật toán checksum để xem dữ liệu có được toàn vẹn hay không.
UDP là một giải pháp được dùng thay cho giao thức TCP. Cả hai giao thức này đều hoạt
động trên lớp IP và có lúc được gọi là UDP/IP hoặc TCP/IP1. Mặc dù đều hoạt động
trên giao thức IP, nhưng UDP và TCP có những khác biệt rất quan trọng. Cụ thể:
Giao thức TCP hỗ trợ giao tiếp máy chủ tới máy chủ (host-to-host). Được coi là phương
thức vận chuyển bảo mật đáng tin cậy nhưng có tốc độ truyền chậm hơn.
Giao thức UDP cho phép giao tiếp quy trình tới quy trình (process-to-process). UDP
chỉ gửi gói tin được gọi là datagram, các gói tin này được truyền đi theo các đường
dẫn khác nhau giữa người gửi và người nhận. 2.
Các thao tác để xây dựng ứng dụng client-server không hướng kết nối
Giai đoạn 1 - Server tạo Socket và gán số hiệu cổng: socket(): Server yêu cầu
tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển.
bind(): Server yêu cầu gán số hiệu cổng (port) cho socket Giai đoạn 2 - Client tạo
Socket: socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng
vận chuyển. Thông thường, hệ thống tự động gán một số hiệu cổng còn rảnh cho socket của Client.
Giai đoạn 3 - Trao đổi thông tin giữa Client và Server: Sau khi tạo Socket xong,
Client và Server có thể trao đổi thông tin qua lại với nhau thông qua hai hàm send()
và receive(). Đơn vị dữ liệu trao đổi giữa Client và Server là các Datagram Package
(Gói tin thư tín). Protocol của ứng dụng phải định nghĩa khuôn dạng và ý nghĩa của
các Datagram Package. Mỗi Datagram Package có chứa thông tin về địa chỉ người
gửi và người nhận (IP, Port)
3. Các lớp AddressFamily, SocketType, ProtocolType
Lớp AddressFamily: Lớp này xác định tập hợp các giá trị mà bạn có thể sử dụng để xác
định họ địa chỉ của giao thức. Ví dụ, AddressFamily.InterNetwork đại diện cho giao thức IPv4.
Lớp SocketType: Lớp này xác định tập hợp các giá trị mà bạn có thể sử dụng để xác định
loại socket. Ví dụ, SocketType.Stream đại diện cho một loại socket cung cấp dịch vụ
truyền tin đáng tin cậy, hai chiều, liên tục, dựa trên kết nối.
Lớp ProtocolType: Lớp này xác định tập hợp các giá trị mà bạn có thể sử dụng để
xác định giao thức mà socket sẽ sử dụng. Ví dụ, ProtocolType.Tcp đại diện cho giao thức TCP. 4. Hàm IPEndPoint()
Lớp IPEndPoint trong ngôn ngữ lập trình C# đại diện cho một điểm cuối mạng dưới dạng
địa chỉ IP và số cổng. Đối tượng IPEndPoint thường được sử dụng để truyền trực tiếp
cho các đối tượng UDP, TCP.
Các thành viên chính của lớp IPEndPoint bao gồm:
Address: Địa chỉ IP của điểm cuối mạng. Port:
Số cổng của điểm cuối mạng.
5. Mô hình ứng dụng client-server không hướng kết nối 6. Các hàm đ )
Các hàm SendTo() và ReceiveFrom() là hai hàm quan trọng trong lập trình mạng với
ngôn ngữ C# khi sử dụng giao thức UDP (User Datagram Protocol).
Hàm SendTo(): Hàm này được sử dụng để gửi dữ liệu từ một socket đến một điểm cuối
mạng cụ thể. Hàm này nhận vào hai tham số chính: một mảng byte chứa dữ liệu cần
gửi và một đối tượng EndPoint đại diện cho điểm cuối mạng mà bạn muốn gửi dữ liệu đến.
Hàm ReceiveFrom(): Hàm này được sử dụng để nhận dữ liệu từ một socket. Hàm
này nhận vào một tham số là một mảng byte để lưu dữ liệu nhận được. Hàm này trả về
một đối tượng EndPoint đại diện cho điểm cuối mạng mà dữ liệu được nhận từ. 7. Các
trường hợp ngoại lệ, xử lý ngoại lệ và bắt lỗi
Chương 4. Các lớp trợ giúp
1. Ưu điểm khi sử dụng các lớp trợ giúp TcpListener, TcpClient, UdpClient so
với lớp Socket trong C#
Đơn giản hóa lập trình socket: Các lớp này giúp đơn giản hóa lập trình socket bằng
cách che bớt một số chi tiết của lớp Socket. Ví dụ, lớp UdpClient giúp đơn giản hóa
việc gửi nhận dữ liệu.
Hỗ trợ lập trình mạng: Các lớp này hỗ trợ thực hiện các nhiệm vụ đặc biệt của lập
trình mạng. Ví dụ, lớp TcpListener giúp tạo ra socket tiếp nhận kết nối, trong khi lớp
TcpClient giúp tạo ra socket gửi/nhận dữ liệu.
Tương tác tốt hơn với người dùng: Ứng dụng không bị “treo” khi thực hiện các nhiệm
vụ kéo dài. Điều này có lợi ích lớn khi phát triển chương trình client.
Server có khả năng phục vụ đồng thời nhiều client: Điều này giúp tăng hiệu suất của server.
Thực thi nhanh hơn trên các hệ thống nhiều CPU hoặc nhiều lõi: Điều này
giúp tăng hiệu suất của ứng dụng
2. Các bước tạo ra 1 ứng dụng TCP Server, TCP client dùng các lớp trợ giúp (helper) của C# Server:
Tạo socket: Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
Gắn socket với địa chỉ: newsock.Bind(ipep);
Lắng nghe kết nối: newsock.Listen(10);
Chấp nhận kết nối: Socket client = newsock.Accept(); Client:
Tạo socket: Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
Kết nối đến Server: server.Connect(ipep);
Sau khi kết nối, Client và Server có thể trao đổi thông tin qua lại bằng cách sử dụng
hàm Send() và Receive(). Khi kết thúc, đóng socket bằng hàm Close(). 3. Các bước
tạo ra ứng dụng 1 server nhiều client
Bước 1: Tạo một Solution trống đặt tên là TcpSocket.
Bước 2: Xây dựng lần lượt hai project thuộc kiểu
Console App trong solution trên với tên gọi lần lượt là Server và Client.
Bước 3: Thiết lập để có thể debug đồng thời cả hai
chương trình, trong đó Server sẽ khởi động trước.
Bước 4: Xây dựng ứng dụng Server
Bước 5: Xây dựng ứng dụng Client
Bước 6: Quá trình truyền và nhận dữ liệu:
Sau khi Client kết nối đến Server và đã được chấp nhận,
Client và Server có thể bắt đầu quá trình truyền và
nhận dữ liệu. Sử dụng hàm Send() và Receive() để
thực hiện các công việc này.
Bước 7: Đóng kết nối:
Sau khi quá trình truyền và nhận dữ liệu kết
thúc, Socket cần phải được đóng lại. Ta có thể sử
dụng hàm Shutdown() để tạm dùng phiên làm
việc và dùng hàm Close() để đóng phiên làm việc đó Chương 5.
Viết các đoạn code cơ bản như: -
gửi mail với giao thức SMTP - nhận mail với giao thức POP3