Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

Nội dung

 3.1 Giao diện lập trình giữa ứng dụng và TCP/IP


Chương diện  3.2 SOCKET và thư viện Winsock
 3.3 Giới thiệu các hàm API cơ bản trong giao diện lập

diện giữa ứng dụng mạng Tương giữa ứng dụng


diện
 Chương ứng dụng mạng sử dụng dịch vụ
Chương trình
vận dữ liệu Client/Server
Tầng ứng dụng

Giao diện SOCKET


 diện ứng dụng mạng thực hiện
chức năng đến
Tầng Transport TCP UDP

Tầng Network
IP
(Internet)

Tầng Data-link
(Host-to-Network)
Các chức năng mà giao diện cung
Đặc điểm của giao diện cấp cho ứng dụng mạng
 chức năng được  Cấp phát tài nguyên hệ thống
 Khởi tạo một kết nối từ client đến server
 Chờ và chấp nhận kết nối (phía server)
 Gửi và nhận dữ liệu
 Tập hợp tạo  Đóng kết nối
 Xử lý các lỗi có thể xảy ra trong toàn bộ quá trình
 Giải phóng các tài nguyên sau khi chấm dứt quá trình
truyền thông

 diện lập gắn kết chặt với hệ điều


hoặc thể được

Cách giao tiếp giữa ứng dụng và


phần mềm TCP/IP 3.2 Socket và thư viện Winsock
 Giao diện SOCKET
 Khái niệm
 Đặc điểm
App 3
App 1 App 2  Ứng dụng
 Thư viện Window Socket
Giao diện TCP/IP - hàm API
Giao diện Socket là gì ? Ý nghĩa của cái tên “Socket”
 Thuật ngữ đời với hệ điều  hệ điều điểm cuối truyền
để
chương
lạc với
 được triển sớm nhất hệ điều
 kết nối sẽ

 Dữ liệu được “gửi” “nhận”

FTP
POP3 CLIENT (local) SERVER (remote)

WEB
Client Server
SMTP
transport transport ứng dụng Client ứng dụng Server
network network Client Server
socket socket
interface interface socket socket
TCP/IP TCP/IP
Internet
Internet DNS
software software

FTP
UDP Telnet
WEB
TCP 12 2: Application Layer
Mô tả Socket Descriptor
 Hệ điều quản như
hệ thống Bảng Socket Descriptor
Family: PF_INET
 Mỗi được định nhất 0 Service: SOCK_STREAM
Local IP: 158.108.33.66
1 Remote IP: 158.108.2.71

2
 Họ thức Local Port: 2249
Remote Port: 21
 Kiểu
 Địa chỉ
3
 Địa chỉ 4

Tiếp tiếp
 Về cơ bản diện thể đặt
SERVER
nhiều thức truyền đó
CLIENT

ứng dụng Client ứng dụng Server  tạo một người lập cần
local socket socket remote
TCP/IP TCP/IP
software Internet software
 dụ chỉ thức
Số hiệu cổng (port number)
 một hệ thống mạng một được
 Số hiệu cổng dạng số

 kiểu sử dụng thức để truyền
 cổng

 kiểu sử dụng thức


 dụ –

 dụ
 cổng được

3.2 Tổng quan thư viện Winsock Các file tương ứng
  Thư viện lập trình
 đặt diện 
 bổ 
 bản  Công cụ lập trình
 bản đầu

 bản bắt đầu hỗ trợ

 HĐH Window hiện đều cả bản


cấu dữ liệu căn bản
thư viện
 được  khởi tạo
 giải
 vấn
 của trạm

 của dịch vụ …):


 chuyển đổi dạng dữ liệu
 được đặt đặc tả  Chuyển dữ liệu kiểu số
tương tự với hệ
điều như  Chuyển đổi địa chỉ

Danh sách (tiếp)


  Giới thiệu ơ ược để nắm
 mới được gốc lập mạng
 Mở kết nối đến một
 Gửi dữ liệu  thực tế thường sử dụng ư viện lập
 Nhận dữ liệu từ mức trừu ượng ơ để việc lập
 Đóng kết nối mạng đơ giản ơ


 ư viện đó ường ở dạng
 địa chỉ sử dụng
 lắng cầu kết nối
 chấp nhận cầu kết nối
 ương học cũng sẽ sử dụng
một mẫu ư viện giảng triển
khởi tạo giải
Cấu trúc dữ liệu WSAData
 Hàm khởi tạo phải được thực hiện thành công trước  Cấu trúc WSAData lưu thông tin của thư viên Winsock được
khi sử dụng Winsock khởi tạo

typedef struct WSAData {


WORD wVersion; // phiên bản Winsock được khởi tạo
WORD wHighVersion; // phiên bản cao nhất đang có
 Hàm giải phóng để thu hồi tài nguyên hệ thống và char szDescription[WSADESCRIPTION_LEN+1];
chấm dứt sử dụng giao diện Socket char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets; // số socket tối đa
unsigned short iMaxUdpDg; //
char FAR * lpVendorInfo;
} WSADATA;

Hàm lấy thông tin máy trạm Cấu trúc dữ liệu hostentry
 Lấy thông tin về host qua tên host  Cấu trúc hostent lưu thông tin về máy trạm được truy
struct hostent FAR* gethostbyname( const char FAR *name ); vấn
struct hostent {
char FAR * h_name; // tên host

 Lấy thông tin về host qua địa chỉ IP của host char FAR * FAR * h_aliases;
short h_addrtype; // kiểu địa chỉ
short h_length; // độ dài địa chỉ
struct hostent FAR* gethostbyaddr( const char FAR *addr, int char FAR * FAR * h_addr_list; // danh sách địa chỉ
len, int type );
};
chuyển đổi dữ liệu số Tại sao cần chuyển đổi
 Chuyển đổi số nguyên lưu trữ trong bộ nhớ sang dạng  hệ

 Cần thống nhất một dạng lưu trữ đổi dữ


liệu số
 Chuyển đổi số ở dạng NBO sang dạng lưu trữ trong bộ
nhớ của máy

Hàm chuyển đổi địa chỉ IP


 Trước gửi dữ liệu số  Hàm chuyển đổi IP từ dạng thập phân sang dạng số
 nhận dữ liệu số : “192.168.0.1” > 10001011…..110

unsigned long inet_addr( const char FAR *cp );


 Đối với dữ liệu phải dạng số tự tự
hoặc khối dữ liệu nhị
 Hàm chuyển đổi IP từ dạng cấu trúc
sang dạng thập phân
10001011…..110 > “192.168.0.1”
char FAR * inet_ntoa( struct in_addr in );

31
 Hàm này sẽ tạo một socket mới  Hàm thiết lập kết nối TCP đến server
 Giá trị trả về là một descriptor tương ứng với int connect(SOCKET s, const struct sockaddr FAR *name, int
socket vừa tạo namelen );

SOCKET socket(int af, int type, int protocol); s


 name trỏ đến cấu trúc địa chỉ của remote socket cần kết
 af : họ địa chỉ (xác định bộ giao thức) nối tới
 AF_INET   length là độ lớn theo byte của cấu trúc địa chỉ socket
 type : kiểu socket
 SOCK_STREAM
 SOCK_DGRAM
 protocol : mặc định là 0

Cấu trúc địa chỉ socket


 Cấu trúc chung cho mọi họ địa chỉ  Hàm gửi dữ liệu qua socket
struct sockaddr
{ int send( SOCKET s, const char FAR *buf, int len, int
u_short sa_family; // họ địa chỉ flags );
char sa_data[14]; // tối đa 14 byte dành cho địa chỉ
};
 buf là địa chỉ vùng đệm bộ nhớ chứa dữ liệu đang
cần gửi
 Cấu trúc dùng cho họ địa chỉ IP  len là độ lớn tính theo byte của dữ liệu cần gửi
struct sockaddr_in  flags : chỉ cách gọi hàm, mặc định = 0
{
short sin_family; // họ địa chỉ
u_short sin_port; // cổng của socket
struct in_addr sin_addr; // địa chỉ IP của socket
char sin_zero[8]; // filler - hiện tại không sử dụng
};
 recv nhận dữ liệu từ socket  bind để gán địa chỉ cho socket
int recv( SOCKET s, char FAR *buf, int len, int flags) int bind( SOCKET s, const struct sockaddr FAR *name, int
namelen );

 buf là địa chỉ bộ nhớ của vùng đệm sẽ chứa dữ liệu  listen để cho socket nhận yêu cầu kết nối ở xa
nhận được
 len là kích thước của vùng đệm bộ nhớ
int listen( SOCKET s, int backlog );
 Giá trị trả về của hàm sẽ là số byte nhận được

 accept chấp nhận yêu cầu kết nối và tạo 1


 close đóng kết nối của socket
socket gắn với kết nối đã được lập
int closesocket( SOCKET s );
SOCKET accept( SOCKET s, struct sockaddr FAR *addr,
int FAR *addrlen );

Phân loại Socket API theo ứng dụng Sơ đồ trình tự gọi hàm Socket API trong ứng
dụng Client/Server
 Được sử dụng ở cả gồm Server (chạy trên hostid) Client

Tạo socket, sử dụng


Gán cổng port = x, sử dụng
Lắng nghe yêu cầu kết nối,
 Chỉ sử dụng chương gồm
Nếu có yêu cầu kết Tạo socket,
nối thì chấp nhận Kết nối đến hostid, port=x

 Chỉ sử dụng chương gồm Nhận bản tin Gửi bản tin yêu cầu

Gửi bản tin trả lời

Nhận bản tin phản hồi


Đóng kết nối

40 2: Application Layer Đóng kết nối


Đóng gói các hàm Socket API Đóng gói Socket API
 API ở mức hệ thống  Một số dự án đã tạo ra các thư viện lập trình mạng
cho C/C++ ở cấp độ ứng dụng(application
 Hơi sử dụng người mới 
 Phải viết nhiều mỗi chức năng 

 lập ứng dụng đóng

Tra cứu chi tiết về các hàm Socket

 Thư viện MSDN:

You might also like