You are on page 1of 89

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC

PHẨM TP.HCM

LẬP TRÌNH MẠNG


(Network programming)

Giảng viên: Ths. Trần Đắc Tốt – Khoa CNTT


Email: tottd@cntp.edu.vn
Website: www.oktot.com
Facebook: https://www.facebook.com/oktotcom/

Chương 1: Những vấn đề cơ bản của lập trình mạng 1


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

Chương 1: Những vấn đề cơ bản của lập trình mạng

Chương 2: Lập trình SOCKET hướng kết nối

Chương 3: Lập trình SOCKET phi kết nối

Chương 4: Sử dụng các lớp trợ giúp của C# SOCKET

Chương 5: Lập trình đa luồng (MULTI-THREADING)

Chương 1: Những vấn đề cơ bản của lập trình mạng 2


CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA
LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính

Mô hình truyền thông

Các mô hình tham chiếu

Tổng quan về lập trình mạng

Chương 1: Những vấn đề cơ bản của lập trình mạng 3


MỤC ĐÍCH – YÊU CẦU

Mục đích: Giới thiệu các khái niệm cơ bản về


Mạng máy tính, truyền thông mạng máy tính
Mô hình OSI, TCP/IP
Windows Socket
Lập trình Socket trong C#
Các lớp DNS trong C#
Yêu cầu: Sinh viên nắm vững các khái niệm cơ bản về
Lập trình mạng
Sử dụng socket trong lập trình mạng

Chương 1: Những vấn đề cơ bản của lập trình mạng 4


CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA
LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính

Mô hình truyền thông

Các mô hình tham chiếu

Tổng quan về lập trình mạng

Chương 1: Những vấn đề cơ bản của lập trình mạng 5


Cơ bản về mạng máy tính

Chương 1: Những vấn đề cơ bản của lập trình mạng 6


Cơ bản về mạng máy tính

Khái niệm mạng máy tính


Tập hợp các máy tính và thiết bị mạng kết nối với nhau theo một kiến
trúc nào đó để trao đổi dữ liệu
Máy tính: máy trạm, máy chủ,
bộ định tuyến, switch..
Kết nối bằng phương tiện truyền thông
Theo một kiến trúc nào đó
Các dạng máy tính ?

Chương 1: Những vấn đề cơ bản của lập trình mạng 7


Cơ bản về mạng máy tính
Internet ngày nay

Chương 1: Những vấn đề cơ bản của lập trình mạng 8


Cơ bản về mạng máy tính
Xử lý tập trung hay phân tán

Chương 1: Những vấn đề cơ bản của lập trình mạng 9


Cơ bản về mạng máy tính
Kiến trúc mạng: Hình trạng (topology) và giao thức (protocol)

Trục (Bus) Vòng (Ring) Sao (Star)

Thực tế là sự kết hợp của nhiều hình trạng

Chương 1: Những vấn đề cơ bản của lập trình mạng 10


Cơ bản về mạng máy tính
Giao thức là gì?

Chương 1: Những vấn đề cơ bản của lập trình mạng 11


Cơ bản về mạng máy tính
Giao thức mạng

Protocol: Quy tắc để truyền thông


Gửi: Một thông điệp với yêu cầu hoặc thông tin
Nhận: Nhận một thông điệp với thông tin, sự kiện hoặc hành động

Định nghĩa khuôn dạng và thứ tự truyền, nhận thông điệp


giữa các thực thể trên mạng hoặc các hành động tương ứng
khi nhận thông điệp

Ví dụ về giao thức mạng: TCP, UDP, IP, HTTP,


Telnet, SSH, Ethernet, …
Chương 1: Những vấn đề cơ bản của lập trình mạng 20 12
CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA
LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính

Mô hình truyền thông

Các mô hình tham chiếu

Tổng quan về lập trình mạng

Chương 1: Những vấn đề cơ bản của lập trình mạng 13


Mô hình truyền thông
Chuyển mạch kênh

• Trao đổi dữ liệu sử dụng một kênh riêng

• Mỗi liên kết sử dụng một kênh. Tài nguyên của kênh đó không được sử bởi kênh
khác cho đến khi đóng liên kết

• Tài nguyên được gán riêng cho mỗi kênh, kê cả khi tài nguyên đó đang rỗi, người
khác cũng không sử dụng được
Mô hình truyền thông
Chuyển mạch gói
• Dữ liệu được chia thành các gói(packets) và được truyền qua mạng
• Nhiều liên kết có thể chia sẻ một kênh
• Internet (Với giao thức IP) sử dụng chuyển mạch gói
• Toàn bộ băng thông được chia sẻ cho tât cả mọi người
• Nếu còn bằng thông thì ai cũng có thể sử dụng được
Mô hình truyền thông
So sánh

Chuyển mạch kênh


Mỗi kênh chỉ sử dụng một liên kết
Bảo đảm băng thông (cần cho các ứng dụng audio/video)
Lãng phí nếu liên kết đó không sử dụng hết khả năng của kênh
Chuyển mạch gói
Tăng hiệu quả sử dụng băng thông
Tốt cho các dữ liệu đến ngẫu nhiên, không định trước
Hạn chế: Tắc nghẽ làm trễ và mất gói tin, không đảm bảo băng thông

Chương 1: Những vấn đề cơ bản của lập trình mạng 16


Mô hình truyền thông
Truyền thông hướng liên kết và không hướng liên kết

Truyền thông hướng liên kết

 Dữ liệu được truyền qua một liên kết đã được thiết lập

 Thông qua 3 giai đoạn: Thiết lập liên kết, truyền dữ liệu hủy bỏ liên
kết.

 Đáng tin cậy

Truyền thông không hướng liên kết

 Không thiết lập liên kết, chỉ có giai đoạn truyền dữ liệu

 Không tin cậy - “Best effort”

Chương 1: Những vấn đề cơ bản của lập trình mạng 17


CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA
LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính

Mô hình truyền thông

Các mô hình tham chiếu

Tổng quan về lập trình mạng

Chương 1: Những vấn đề cơ bản của lập trình mạng 18


Các mô hình tham chiếu
OSI - Open System Interconnection: Bao gồm 7 tầng

Chương 1: Những vấn đề cơ bản của lập trình mạng 19


Các mô hình tham chiếu

Chức năng chung của các tầng

Vật lý: Truyền bits “trên đường truyền”

Liên kết dữ liệu: Truyền dữ liệu giữa các thành phần nối kết trong mạng

Mạng: chọn đường, chuyển tiếp gói tin từ nguồn tới đích

Giao vận: Xử lý việc truyền-nhận dữ liệu cho các ứng dụng

Phiên: Đồng bộ hóa, check-point, khôi phục quá trình trao đổi

Trình diễn: cho phép các ứng dụng biễu diễn dữ liệu, e.g., mã hóa, nén,
chuyển đổi…

Ứng dụng: Hỗ trợ các ứng dụng trên mạng


Chương 1: Những vấn đề cơ bản của lập trình mạng 20
Các mô hình tham chiếu
Mô hình OSI và TCP/IP
Trong mô hình TCP/IP (Internet), chức năng 3 tầng trên được phân định
vào một tầng duy nhất

Chương 1: Những vấn đề cơ bản của lập trình mạng 21


Mô hình phân tầng của Internet

Ví dụ về quá trình gửi dữ liệu từ nguồn, qua nút trung gian (bộ đinh tuyến), rồi tới đích

FTP FTP

TCP TCP

IP IP IP

Ethernet/10M 10M 100M 100M/Ethernet

CAT5 CAT5 CAT5 CAT5

Nguồn Nút trung gian Đích

Chương 1: Những vấn đề cơ bản của lập trình mạng


Đóng gói dữ liệu (Encapsulation)

Gói quà

Trang trí

Dán địa chỉ

Địa chỉ Địa chỉ

Chương 1: Những vấn đề cơ bản của lập trình mạng


PDU: Protocol Data Unit – Đơn vị dữ liệu
giao thức

Layer (N+1) (N+1) PDU


Service interface

Protocol N
Layer (N) (N) PDU HN
Service interface
Protocol N-1
addr.
Layer (N-1) (N-1) PDU HN HN-1

Chương 1: Những vấn đề cơ bản của lập trình mạng


Họ giao thức TCP/IP và quá trình đóng gói

Bên gửi
Mỗi tầng thêm các thông tin điều khiển (header) vào gói tin và truyền xuống tâng
dưới
Bên nhận
Mỗi tầng xử lý thông tin dựa trên phần header, sau đó bỏ header và truyền dữ liệu lên
tầng trên

Ex:HTTP header
Application Application
Data Data
TCP header TCP TCP

IP header IP IP

Ethernet Frame Network Interface Network Interface

Physical Physical
Signal
Sender Receiver
Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

TCP header Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

IP header TCP header Dữ liệu - payload


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

Ethernet header IP header TCP header Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

IP header TCP header Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

WDM header IP header TCP header Dư liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

IP header TCP header Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

Ethernet header IP header TCP header Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

IP header TCP header Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

TCP header Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Protocol stack và quá trình đóng gói

FTP FTP

TCP TCP

IP IP IP IP

Ethernet/10M 10M 10G 10G Ethernet/100M

CAT5 CAT5 WDM WDM CAT5 CAT5

End node Intermediate node End node

Dữ liệu - payload

Chương 1: Những vấn đề cơ bản của lập trình mạng


Tóm tắt: ưu điểm của kiến trúc phân tầng

Chia nhỏ cho phép dễ dàng xác định chức năng của mỗi tầng

Các tầng hoạt động độc lập

Tầng trên chỉ quan tâm đến việc sử dụng tầng dưới mà không quan tâm
đến các tầng xa hơn.

Cho phép định nghĩa giao diện chung giữa các tầng

Khả năng mở rộng

Mềm dẻo, linh hoạt với các công nghệ mới

Trao đổi giữa các tầng đồng mức: Có thể cải tiến hệ thống bằng cách thay
đổi công nghệ của tầng tương ứng. Vd: ISDN→ADSL→FTTH、IPv4→IPv6

Nếu không phân tầng: Khi muốn thay đổi, phải làm toàn bộ

Chương 1: Những vấn đề cơ bản của lập trình mạng


Định danh trên Internet và quan hệ với các tầng

application Port Number, e.g. Port 80

TCP/UDP

IP IP address, e.g. 203.12.15.165

data link Physical address / MAC address


e.g. 00:11:24:79:8e:82
physical

Chương 1: Những vấn đề cơ bản của lập trình mạng


Địa chỉ dùng trong tầng liên kết dữ liệu

Địa chỉ vật lý /địa chỉ MAC

Sử dụng trong tầng liên kết dữ liệu


Cố định trên card mạng NIC ( Network Interface Card)
Sử dụng để địa chỉ hóa máy tính trong các mạng quảng bá

HEX 00:11:24:79:8e:82
BIN 00000000 00010001 00100100 01111001 10001110 10000010

OUI Gán bởi nhà sản xuất

OUI (Organizationally Unique Identifier): Mã nhà sản xuất


Mỗi nhà sản xuất có các giá trị OUI riêng
Một nhà sản xuất có thể có nhiều OUI

Chương 1: Những vấn đề cơ bản của lập trình mạng


Định danh dùng trên Internet

Địa chỉ IP
Dùng trong giao thức IP - Internet Protocol (tầng mạng)
Giá trị phụ thuộc từng mạng, mỗi card mạng được gán một địa chỉ IP

Sử dụng để định danh máy tính trong một mạng IP


ví dụ :
133.113.215.10 (ipv4)
2001:200:0:8803::53 (ipv6)

Chương 1: Những vấn đề cơ bản của lập trình mạng


Địa chỉ sử dụng trong tầng giao vận

Số hiệu cổng: Một địa chỉ phụ, dùng kèm theo địa chỉ IP

Các ứng dụng được định danh bởi một địa chỉ IP và một số hiệu cổng

E.g. HTTP cổng 80, FTP cổng 20, 21 …

Chương 1: Những vấn đề cơ bản của lập trình mạng


Các RFC quan trọng

RFC Document Giao thức


RFC 821 SMTP (email, outgoing)
RFC 954 WHOIS
RFC 959 FTP (uploading and downloading)
RFC 1939 POP3 (email, incoming)
RFC 2616 HTTP (Web browsing)
RFC 793 TCP (runs under all above protocols)
RFC 792 ICMP (ping)
RFC 791 IP (runs under TCP and ICMP)
Chương 1: Những vấn đề cơ bản của lập trình mạng 42
CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA
LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính

Mô hình truyền thông

Các mô hình tham chiếu

Tổng quan về lập trình mạng

Chương 1: Những vấn đề cơ bản của lập trình mạng 43


Mô hình Client / Server

Phục vụ

Xử lý

Yêu cầu

 Tạo ra 1 yêu cầu  Lắng nghe yêu cầu


 Gửi yêu cầu qua Server  Nhận yêu cầu
 Chờ Server xử lý  Xử lý yêu cầu
 Nhận kết quả trả về và  Gửi kết quả trả về
xử lý theo mục đích riêng cho Client

Dạng thức của thông điệp phải tuân theo protocol của dịch vụ.

44
Mô hình Client / Server

• Mô hình Client-Server của dịch vụ WEB:


Trình Xử lý
Trang duyệt
Web


file1.htm
Web Server

Web Client
Mô hình Client / Server

 Các chế độ giao tiếp:

Chế độ giao tiếp nghẽn Chế độ giao tiếp không nghẽn


Các kiểu kiến trúc chương trình

 Chức năng của 1 chương trình ứng dụng:


 Giao diện người dùng (User Interface):
 Tương tác với người dùng
 Nhập liệu, báo biểu, thông báo ra màn hình, …
 Dịch vụ nghiệp vụ (Business Rule):
 Tính toán dữ liệu
 Xử lý thông tin
 Dịch vụ lưu trữ (Data Storage):
 Lưu trữ dữ liệu
 Truy vấn dữ liệu
Các kiểu kiến trúc chương trình

CLIENT SERVER

Presentation Presentation
Presentation Presentation
Logic Logic
Interfaces to Interfaces to
Presentation GUI Presentation GUI
Business Logic Business Logic
Actual Program Actual Program
Rules Application Communication Application Rules

Database Logic Database Logic


Interfaces to DBMS Interfaces to DBMS
in Data Layer in Data Layer

Data Data

GOLDMAN: CSIS
FIG. 01-11
Mô hình của 1 chương trình ứng dụng
Các kiểu kiến trúc chương trình

• Kiến trúc đơn tầng:

User Interface
 Sử dụng trên 1 máy tính

Business Rule  Dễ cài đặt


 Nhiều nhược điểm
Data Storage

Cần có kiến trúc mới – Client/Server


Các kiểu kiến trúc chương trình

• Kiến trúc 2 tầng (2-tiered):

Client/Server kiểu Fat Client

Client/Server kiểu Fat Server


Các kiểu kiến trúc chương trình

• Kiến trúc đa tầng (n tiered):


– Thường gọi là Ứng dụng phân tán.
– Mỗi thành phần có nhiệm vụ riêng.

Middleware

Application Database
Client Server Server

Mô hình Client/Server 3 tầng


51
Các kiểu kiến trúc chương trình

• So sánh kiến trúc 2 tầng và kiến trúc

DEPARTMENTAL SUPER-SERVERS
MAINFRAMES
3 tầng của ứng dụng

TIER 3
Database Logic

SERVERS

TIER 2
Database Business Logic
Logic
Database
Logic
Business Middleware
Logic

Business

TIER 1
CLIENTS
Logic Presentation
Logic Presentation Logic
Presentation
Logic

Fat Client Fat Server

TWO-TIERED THREE-TIERED
ARCHITECTURE ARCHITECTURES

GOLDMAN: CSIS
FIG. 01-24
Giới thiệu về Socket

Sockets cung cấp một interface để lập trình mạng tại tầng Transport.

Một socket là một end-point của một liên kết giữa hai ứng dụng mạng.

Nhiều NNLT: C, C++, Java, VB, C#, . . .

Windows Socket Application Programming Interface (Winsock API)

Winsock hỗ trợ xây dựng các ứng dụng mạng trên nền TCP/IP.

.NET hỗ trợ lập trình mạng tốt nhất so với các sản phẩm khác của
Microsoft

=> Mục tiêu: nghiên cứu cách xây dựng ứng dụng truyền thông
client/server dùng Sockets

Chương 1: Những vấn đề cơ bản của lập trình mạng 53


Giới thiệu về Socket

Giới thiệu về Windows Socket

Windows Sockets Application Programming Interface (WinSock API) là


một giao diện lập trình mạng dưới nền tảng của Windows.
Đầu tiên Windows Socket được phát triển cho hệ điều hành Linux,
nhưng nay nó đã được cài đặt trền Windows và hỗ trợ cơ chế điều
khiển thông điệp tự nhiên của Windows.
Windows Socket đã phát triền qua nhiều phiên bản
Vd phiên bản chạy
trên Windows XP và 2000 là 2.2

Chương 1: Những vấn đề cơ bản của lập trình mạng 54


Giới thiệu về Socket

Giới thiệu về Windows Socket

Windows Sockets cho phép những nhà sản xuất cung cấp một giao
diện đồng nhầt để người lập trình có thể viết các chương trình ứng
dụng theo những đặc tả của Windows Sockets và có thể chạy được
trên bất kỳ hệ thống nào có hỗ trợ Windows Sockets.

Các phiên bản sau của Windows socket đều tương thích với các phiên
bản trước của nó. Điều đó có nghĩa là một ứng dụng được viết cho
phiền bản trước cũng hoàn toàn có thể chạy được trên phiên bản sau
của Windows Sockets.

Windows Sockets hỗ trợ nhiều giao thức khác: IPX/SPX, Apple’s


Appletalk, ATM,….
Chương 1: Những vấn đề cơ bản của lập trình mạng 55
Giới thiệu về Socket

Một số khái niệm

Socket: Một điểm giao tiếp đầu cuối của một chương trình trên mạng.

Một TCP/IP Sockets được xác định bằng sự kết nối của một địa chỉ và
một số hiệu cổng

 Địa chỉ sẽ xác định máy mà Sockets đó làm việc

 Cổng sẽ xác định chính xác tiến trình đang thực hiện Sockets trên
máy có địa chỉ đó.

Chương 1: Những vấn đề cơ bản của lập trình mạng 56


Khái niệm địa chỉ và cổng (Address & Port)

Chương 1: Những vấn đề cơ bản của lập trình mạng 57


Khái niệm địa chỉ và cổng (Address & Port)

Nguyên lý
Trong máy có rất nhiều ứng dụng muốn trao đổi với các ứng dụng khác
thông qua mạng.
Ví dụ: có 2 ứng dụng của máy A muốn trao đổi với với 2 ứng dụng trên máy
B
Mỗi máy tính chỉ có duy nhất một đường truyền dữ liệu (để gửi và nhận)

Vấn đề
Có thể xảy ra "nhầm lẫn" khi dữ liệu từ máy A gửi đến máy B thì trên máy
B không biết là dữ liệu đó gửi cho ứng dụng nào?
Mỗi ứng dụng trên máy B sẽ được gán một số hiệu (cổng: Port), từ
0..65535.

Chương 1: Những vấn đề cơ bản của lập trình mạng 58


Khái niệm địa chỉ và cổng (Address & Port)

Cách giải quyết


Khi ứng dụng trên máy A muốn gửi cho ứng dụng nào trên máy B thì chỉ
việc điền thêm số hiệu cổng (vào trường RemotePort) vào gói tin cần gửi.
Trên máy B, các ứng dụng chỉ việc kiểm tra giá trị cổng trên mỗi gói tin
xem có trùng với số hiệu cổng của mình (đã được gán – chính là giá trị
LocalPort) hay không? Nếu bằng thì xử lý, trái lại thì không làm gì (vì
không phải là của mình).

Chương 1: Những vấn đề cơ bản của lập trình mạng 59


Khái niệm địa chỉ và cổng (Address & Port)

Một số quy định

Không bao giờ có 2 ứng dụng lại cùng dùng 1 port

Các port từ 0 – 1023 (Well-know): dùng cho các ứng dụng quan trọng
trên hệ điều hành

Các port từ 1024 – 49151 (Registered): dành cho người lập trình (khuyến
cáo tuân theo)

Các port từ 49152 – 65535 (Dynamic): dự trữ

Chương 1: Những vấn đề cơ bản của lập trình mạng 60


Lập trình Socket với C#

Giao tiếp sử dụng socket có thể ở chế độ hướng kết nối (giao thức TCP)
hoặc không hướng kết nối (giao thức UDP) bằng cách xác định giao thức
của tầng vận chuyển.
Program A Program B

port port

Transport protocol Transport protocol


portprotocol
Network portprotocol
Network
Network driver Network driver

Host1 Host2

Giao tiÕp gi÷a hai qu¸ tr×nh sö dông Socket

Chương 1: Những vấn đề cơ bản của lập trình mạng 61


Lập trình Socket với C#
• Chế độ có nối kết  ChÕ ®é kh«ng nèi kÕt
(connection): (connectionless):
• Tồn tại kênh giao tiếp ảo giữa  Kh«ng tån t¹i kªnh giao tiÕp ¶o gi÷a
client và server. client vµ server.
• Dữ liệu được gởi đi theo chế độ  D÷ liÖu được gëi ®i theo chÕ ®é
bảo đảm: kh«ng b¶o ®¶m:
– Kiểm tra lỗi.  Kh«ng kiÓm tra lçi.
– Truyền lại gói tin lỗi, mất  Kh«ng ph¸t hiÖn, kh«ng truyÒn l¹i
gãi tin lçi, mÊt.
– Bảo đảm thứ tự các gói tin
 Kh«ng b¶o ®¶m thø tù c¸c gãi tin
– ...
 ...
• Dữ liệu chính xác, Tốc độ truyền
chậm.  D÷ liÖu kh«ng chÝnh x¸c, tèc ®é
truyÒn nhanh.
 ThÝch hîp cho c¸c øng dông cÇn tèc
®é, kh«ng cÇn chÝnh x¸c cao: truyÒn
©m thanh, h×nh ¶nh . . .
Chương 1: Những vấn đề cơ bản của lập trình mạng 62
Lập trình Socket với C#

Giao tiếp sử dụng socket có thể ở chế độ hướng kết nối (giao thức TCP)
hoặc không hướng kết nối (giao thức UDP) bằng cách xác định giao thức
của tầng vận chuyển.

Chương 1: Những vấn đề cơ bản của lập trình mạng 63


Lập trình Socket với C#

Các lớp trong .NET Framework được tạo ra để cung cấp một giao diện
dễ dàng cho các lập trình viên.

Nội dung phần này sẽ gồm:

IP Addresses in C#

Using C# Sockets

Chương 1: Những vấn đề cơ bản của lập trình mạng 64


Lớp IPAddress

Trên Internet mỗi một trạm (có thể là máy tính, máy in, thiết bị …) đều có
một định danh duy nhất, định danh đó thường được gọi là một địa chỉ
(Address).

Địa chỉ trên Internet là một tập hợp gồm 4 con số có giá trị từ 0-255 và
cách nhau bởi dấu chấm.

Để thể hiện địa chỉ này, người ta có thể viết dưới các dạng sau:

Tên: ví dụ như May01, Server, …

Địa chỉ IP nhưng đặt trong một chuỗi: "192.168.1.1", "127.0.0.1“

Đặt trong một mảng 4 byte, mỗi byte chứa một số từ 0-255.

Hoặc cũng có thể là một số (long), có độ dài 4 byte. Ví dụ, với địa chỉ
192.168.1.2 ở trên thì giá trị đó sẽ là 33663168 (số ở hệ thập phân khi xếp
liền 4 byte ở trên lại với nhau) 00000010000000011010100011000000
2 (byte 0) 1 (byte 1) 168 (byte 2) 192 (byte 3)
13/07/2016 65
Lớp IPAddress

• Như vậy, để đổi một địa chỉ chuẩn ra dạng số chúng ta chỉ việc tính toán
cho từng thành phần.

• Ví dụ: Đổi địa chỉ 192.168.1.2 ra số, ta tính như sau:

2 * 256 ^ 3 + 1 * 256 ^ 2 + 168 * 256 ^ 1 + 192 * 256 ^ 0 =


33663168

• IPAddress được sử dụng để biểu hiện một địa chỉ IP duy nhất

• Hàm tạo là : public IPAddress(long address)

• Tuy nhiên hàm tạo này không được sử dụng thường xuyên.

• Lớp IPAddress cung cấp một số phương thức khác để làm việc với địa chỉ
IP

13/07/2016 66
Lớp IPAddress: các thành viên

Tên phương thức Mô tả

Trả về họ địa chỉ của địa chỉ IP hiện hành. Nếu địa chỉ
AddressFamily ở dạng IPv4 thì kết quả là Internetwork và
InternetworkV6 nếu là địa chỉ IPv6.

- IPAddress(Số_Long)  Tạo địa chỉ IP từ một số


kiểu long
Constructor
- IPAddress(Mảng_Byte)  Tạo địa chỉ IP từ một
mảng byte (4 byte).

GetAddressBytes Chuyển địa chỉ thành mảng byte (4 byte).

Đảo thứ tự byte của một số cho đúng với thứ tự byte
HostToNetworkOrder
trong địa chỉ IPAddress.
13/07/2016 67
Lớp IPAddress: các thành viên

Tên phương thức Mô tả

IsLoopback Cho biết địa chỉ có phải là địa chỉ lặp hay không?

Đảo thứ tự byte của một địa chỉ cho đúng với thứ tự
NetworkToHostOrder
byte thông thường.

Chuyển một địa chỉ IP ở dạng chuỗi thành một địa chỉ
Parse
IP chuẩn (Một đối tượng IPAddress)

Trả về địa chỉ IP (một chuỗi) nhưng ở dạng ký pháp


ToString
có dấu chấm. (Ví dụ "192.168.1.1").

Kiểm tra xem một địa chỉ IP (ở dạng chuỗi) có phải


TryParse (S: String)
đúng là địa chỉ IP hợp lệ hay không? True = đúng
13/07/2016 68
IPAddress: Ví dụ tạo địa chỉ

• Cách 1: Dùng hàm khởi tạo


Byte[] b = new Byte[4];
b[0] = 192;
b[1] = 168;
b[2] = 1;
b[3] = 2;
IPAddress Ip1 = new IPAddress(b);
• Cách 2: Dùng hàm khởi tạo
IPAddress Ip2 = new IPAddress(33663168);
• Cách 3: Dùng hàm khởi tạo
IPAddress Ip3 = IPAddress.Parse(“192.168.1.2")
• Cách 4: Thông qua tính toán
Long So = 192* 256^0+168* 256^1+1* 256^2 + 2*256^3;
IPAddress Ip4 = new IPAddress(So);
13/07/2016 69
Lớp IPAddress: các thành viên

Tên thuộc tính Mô tả

Cung cấp một địa chỉ IP (thường là 0.0.0.0) để chỉ ra rằng


Server phải lắng nghe các hoạt động của Client trên tất cả
Any
các Card mạng (sử dụng khi xây dựng Server). Thuộc tính
này chỉ đọc.

Cung cấp một địa chỉ IP quảng bá (Broadcast, thường là


Broadcast 255.255.255.255), ở dạng số Long. Muốn lấy ở dạng chuỗi,
viết: Broadcast.ToString(). Thuộc tính này chỉ đọc.
Trả về một địa chỉ IP lặp (IP Loopback, ví dụ 127.0.0.1).
Loopback
Thuộc tính này chỉ đọc.
Một địa chỉ IP (An Internet Protocol (IP) address) ở dạng số
Address Long. (Muốn chuyển sang dạng dấu chấm, viết :
Address.ToString())
13/07/2016 70
IPAddress: Ví dụ kiểm tra địa chỉ

private void KiemTra()


{
IPAddress ip;
String Ip4 = "127.0.0.1";
String Ip5 = "999.0.0.1";
MessageBox.Show(IPAddress.TryParse(Ip4, out ip).ToString());
MessageBox.Show(IPAddress.TryParse(Ip5, out ip).ToString());
}

13/07/2016 71
IPAddress: Ví dụ chuyển địa chỉ hiện hành ra
mảng
void ChuyenDoi()
{
IPAddress Ip3 = new IPAddress(16885952);
Byte[] b= new Byte[4];
b = Ip3.GetAddressBytes();
MessageBox.Show("Address: " + b[0] + "." + b[1] + "." + b[2]
+ "." + b[3]);
}

13/07/2016 72
Lớp IPEndpoint

• Trong mạng, để hai trạm có thể trao đổi thông tin được với nhau thì chúng
cần phải biết được địa chỉ (IP) của nhau và số hiệu cổng mà hai bên dùng
để trao đổi thông tin.
• Lớp IPAddress mới chỉ cung cấp địa chỉ IP (IPAddress), như vậy vẫn còn
thiếu số hiệu cổng (Port number).
• .NET Framework sử dụng IPEndPoint để biểu diễn một sự kết hợp giữa
cổng và địa chỉ IP
• Hai hàm tạo của lớp này là:
– IPEndPoint(long address, int port)
– IPEndPoint(IPAddress address, int port)
• Hàm tạo thứ 2 được sử dụng phổ biến hơn

13/07/2016 73
Lớp IPEndpoint: các thành viên

Tên thuộc tính Mô tả

Address Trả về hoặc thiết lập địa chỉ IP cho endpoint. (Trả về một đối
tượng IPAddress)

AddressFamily Lấy về loại giao thức mà Endpoint này đang sử dụng.

Port Lấy về hoặc thiết lập số hiệu cổng của endpoint.

13/07/2016 74
Lớp IPEndpoint: các thành viên

Tên phương
Mô tả
thức
IPEndPoint Tạo một đối tượng mới của lớp IPEndPoint, tham số
(Int64, Int32) truyền vào là địa chỉ IP (ở dạng số) và cổng sẽ dùng để
giao tiếp.

IPEndPoint Tạo một đối tượng mới của lớp IPEndPoint, Tham số
(IPAddress, truyền vào là một địa chỉ IPAddress và số hiệu cổng dùng
Int32) để giao tiếp. (Tham khảo cách tạo IPAddress ở phần trên)

Create Tạo một endpoint từ một địa chỉ socket (socket address).

ToString Trả về địa chỉ IP và số hiệu cổng theo khuôn dạng ĐịaChỉ:
Cổng, ví dụ: 192.168.1.1:8080

13/07/2016 75
Lớp IPEndpoint: ví dụ khởi tạo

private void TaoEndpoint()


{
// Tạo một địa chỉ IP
IPAddress IPAdd = IPAddress.Parse("127.0.0.1");
// Truyền vào cho hàm khởi tạo để tạo IPEndpoint
IPEndPoint IPep = new IPEndPoint(IPAdd, 10000);
}

13/07/2016 76
Lớp IPEndpoint: ví dụ khởi tạo

private void TaoEndPointBoiTenMay()


{
IPAddress IPAdd = new IPAddress();
//tạo đối tượng IP từ tên của máy thông qua phương thức tĩnh
Dns.GetHostAddresses của lớp DNS
IPAdd = Dns.GetHostAddresses("Localhost")[0];
IPEndPoint IPep = new IPEndPoint(IPAdd, 10000);
}

13/07/2016 77
Lớp IPEndpoint: ví dụ khởi tạo

Lưu ý : Vì một máy tính có thể có nhiều card mạng (Interface) do vậy có
thể có nhiều hơn 1 địa chỉ IP.

Hàm GetHostAddresses sẽ trả về cho chúng ta một mảng chứa tất cả các
địa chỉ đó.

Chúng ta lấy chỉ số là 0 để chọn địa chỉ của card mạng đầu tiên.

IPHostEntry là lớp chứa (Container) về thông tin địa chỉ của các máy trạm
trên Internet.

Lưu ý: Nó chỉ là nơi để "chứa", do vậy trước khi sử dụng cần phải “nạp"
thông tin vào cho nó.

Lớp này rất hay được dùng với lớp DNS

13/07/2016 78
Lớp IPHostEntry: các thành viên

Tên thuộc tính Mô tả

AddressList Lấy về hoặc thiết lập danh sách các địa chỉ IP liên kết với
một host.

Aliases Lấy về hoặc thiết lập danh sách các bí danh (alias) liên kết
với một host.

HostName Lấy về hoặc thiết lập DNS name của host.

13/07/2016 79
Sử dụng C# Sockets

System.Net.Sockets namespace có chứa các lớp cung cấp giao diện lập
trình Net cho các hàm mức thấp API winsock

Tạo socket

Sử dụng hàm tạo của lớp Socket

Socket(AddressFamily af, SocketType st, ProtocolType pt)


• Trong đó:

– An AddressFamily to define the network type:

– A SocketType to define the type of data connection

– A ProtocolType to define a specific network protocol

• Giá trị của AddressFamily luôn là InterNetwork

• Còn giá trị của SocketType và ProtocolType phải được kết hợp đúng
13/07/2016 80
Sử dụng C# Sockets

Bảng kết hợp

SocketType Protocoltype Description


Dgram Udp Connectionless communication

Stream Tcp Connection-oriented communication

Raw Icmp Internet Control Message Protocol

Raw Raw Plain IP packet communication

• Vị dụ về tạo Socket
Socket newsock =
Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
13/07/2016 81
Sử dụng C# Sockets

Một số thuộc tính của lớp Socket

Property Description
AddressFamily Gets the address family of the Socket
Available Gets the amount of data that is ready to be read
Blocking Gets or sets whether the Socket is in blocking mode
Connected Gets a value that indicates if the Socket is connected to a
remote device
Handle Gets the operating system handle for the Socket
LocalEndPoint Gets the local EndPoint object for the Socket
ProtocolType Gets the protocol type of the Socket
RemoteEndPoint Gets the remote EndPoint information for the Socket
SocketType Gets the type of the Socket
13/07/2016 82
DNS (Domain Name Service)

DNS (Domain Name Service) là một lớp giúp chúng ta trong việc phân giải
tên miền (Domain Resolution) đơn giản.

Phân giải tên miền tức là: Đầu vào là tên của máy trạm thì đầu ra sẽ cho
ta địa chỉ IP tương ứng của máy đó, ví dụ: ServerCNTT 192.168.3.8

Ngoài ra lớp Dns còn có rất nhiều phương thức cho chúng ta thêm thông
tin về máy cục bộ như tên, địa chỉ, v.v.

System.Net namespace có chứa lớp Dns trong đó có chứa tất cả các hàm
cần thiết khi ta làm việc với hệ thống tên miền.

Trong các phương thức này có


– Các phương thức đồng bộ
– Các phương thức không đồng bộ

13/07/2016 83
Lớp DNS: các thành viên

Tên phương thức Mô tả


GetHostByAddress Trả về thông tin (IPHostEntry) của trạm có địa
(String IP) chỉ IP được truyền vào.
GetHostByAddress
(IPAddress IP)  Thay bằng GetHostEntry()
GetHostByName Trả về thông tin (IPHostEntry) DNS của một
(String hostname) trạm  Đã bị loại bỏ. Thay bằng
GetHostEntry()
HostName Cho ta biết tên của máy vừa được phân giải.
Nếu không phân giải được thì có giá trị là địa
chỉ IP.

13/07/2016 84
Lớp DNS: các thành viên

Tên phương thức Mô tả


GetHostAddresses (String Trả về tất cả các địa chỉ IP của một trạm. Kiểu
IP_Or_HostName) IPAddress

GetHostEntry (String Giải đáp tên hoặc địa chỉ IP truyền vào và trả
IP_Or_HostName) về một đối tượng IPHostEntry tương ứng.
GetHostEntry (IPAddress IP)

GetHostName Lấy về tên của máy tính cục bộ (String).


Resolve (String Hostname) Chuyển tên của máy hoặc địa chỉ IP thành
IPHostEntry tương ứng.
 Đã bị bỏ, thay bằng GetHostEntry()
• Lưu ý: Đây là các phương thức tĩnh, do vậy khi gọi thì gọi trực tiếp từ
tên lớp mà không cần phải khai báo một đối tượng mới của lớp này.
• Ví dụ: Dns.Resolve, Dns.GetHostname, Dns.GetHostEntry, v.v…
13/07/2016 85
Lớp DNS: ví dụ 1

private void ShowIPs()


{
// Lấy tất cả địa chỉ IP của máy
IPAddress[] add = Dns.GetHostAddresses("PC");
foreach (IPAddress ip in add) {
MessageBox.Show(ip.ToString());
}
//Cách 2
//for (int i = 0; i < add.Length; i++)
//{
// MessageBox.Show(add[i].ToString());
//}
}

13/07/2016 86
Lớp DNS: ví dụ 2

private void CreatIPHostEntry() {


IPHostEntry iphe1, iphe2, iphe3;
IPAddress ipadd = IPAddress.Parse("127.0.0.1");
iphe1 = Dns.GetHostEntry("Notebook");
iphe2 = Dns.GetHostEntry("127.0.0.1");
iphe3 = Dns.GetHostEntry(ipadd);
MessageBox.Show(iphe1.HostName);
MessageBox.Show(iphe2.HostName) ;
MessageBox.Show(iphe3.HostName) ;
}

13/07/2016 87
TÓM LƯỢC BÀI HỌC

Cơ bản về mạng máy tính

Mô hình truyền thông

Các mô hình tham chiếu

Tổng quan về lập trình mạng

Chương 1: Những vấn đề cơ bản của lập trình mạng 88


Chương 1: Những vấn đề cơ bản của lập trình mạng 89

You might also like