chuong ii_1. gioi thieu windows socket
TRANSCRIPT
I. TỔNG QUAN VỀ I. TỔNG QUAN VỀ
WINDOWS SOCKETWINDOWS SOCKET 1.1. GiGiới thiệu chung về windows ới thiệu chung về windows
socketsocket2.2. KiKiến trúc của windows socketến trúc của windows socket
3.3. MMột số khái niệm liên quanột số khái niệm liên quan
1. Giới thiệu chung về 1. Giới thiệu chung về window socketwindow socket
Windows Sockets Application Windows Sockets Application Programming Interface (WinSock Programming Interface (WinSock API) là một giao diện lập trình mạng API) là một giao diện lập trình mạng dưới nền tảng của Windows.dưới nền tảng của Windows.
Đầu tiên Windows Socket được phát Đầu tiên Windows Socket được phát triển cho hệ điều hành Linux triển cho hệ điều hành Linux
Windows Socket đã phát triền qua Windows Socket đã phát triền qua nhiều phiên bản và bản hiện tại chạy nhiều phiên bản và bản hiện tại chạy trên Windows XP và 2000 là 2.2 trên Windows XP và 2000 là 2.2
Các phiên bản của windows Các phiên bản của windows socketsocket
Sự tương thích của các Sự tương thích của các phiên bản windows socketphiên bản windows socket
Mối quan hệ giữa Windows socket và Mối quan hệ giữa Windows socket và mô hình OSImô hình OSI
2. Kiến trúc của Windows 2. Kiến trúc của Windows socketssockets
3. Một số khái niệm 3. Một số khái niệm
Socket: Một điểm giao tiếp đầu cuối Socket: Một điểm giao tiếp đầu cuối của một chương trình trên mạng.của một chương trình trên mạng.
Một TCP/IP Sockets được xác định Một TCP/IP Sockets được xác định bằng sự kết hợp của một địa chỉ và một bằng sự kết hợp của một địa chỉ và một số hiệu cổngsố hiệu cổng Địa chỉ sẽ xác định máy mà Sockét đó làm Địa chỉ sẽ xác định máy mà Sockét đó làm
việcviệc cổng sẽ xác định chính xác tiến trình đang 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ỉ đó. thực hiện Sockets trên máy có địa chỉ đó.
II. kHỞI ĐỘNG VÀ ĐÓNG II. kHỞI ĐỘNG VÀ ĐÓNG WINDOWS SOCKETWINDOWS SOCKET
1. Khởi động socket1. Khởi động socket
2. Đóng socket2. Đóng socket
3. Kiểm tra lỗi3. Kiểm tra lỗi
1. Khởi động socket1. Khởi động socket
Mục đính: Mở thư viện có chứa các Mục đính: Mở thư viện có chứa các hàm của windows sockethàm của windows socket
Hàm thực hiện có nguyên mẫu:Hàm thực hiện có nguyên mẫu:
int WSAStartup(int WSAStartup(
WORD WORD wVersionRequired,wVersionRequired,
LPWSADATA LPWSADATA lpWSADatalpWSAData
););
Trong đó:Trong đó: wVersionRequiredwVersionRequired: Là phiên bản : Là phiên bản
cao nhất của Windows Sockets mà cao nhất của Windows Sockets mà ứng dụng của ta có thể sử dụng ứng dụng của ta có thể sử dụng được. được.
lpWSADatalpWSAData: Con trỏ trỏ đến cấu : Con trỏ trỏ đến cấu trúc WSADATA để nhận lại thông trúc WSADATA để nhận lại thông tin chi tiết về Windows Sockets tin chi tiết về Windows Sockets được cài đặt trên hệ thống.được cài đặt trên hệ thống.
Cấu trúc WSADATACấu trúc WSADATA
typedef struct WSAData {typedef struct WSAData {
WORD wVersion;WORD wVersion;
WORD wHighVersion;WORD wHighVersion;
char char szDescription[WSADESCRIPTION_LEN+1];szDescription[WSADESCRIPTION_LEN+1];
char char szSystemStatus[WSASYS_STATUS_LEN+1];szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;unsigned short iMaxSockets;
unsigned short iMaxUdpDg;unsigned short iMaxUdpDg;
char FAR * lpVendorInfo;char FAR * lpVendorInfo;
} WSADATA;} WSADATA;
Trong đó: Trong đó: wVersionwVersion: Là phiên bản Windows Sockets mà : Là phiên bản Windows Sockets mà
ứng dụng yêu cầu và hệ thống có thể load được.ứng dụng yêu cầu và hệ thống có thể load được. wHighVersionwHighVersion: Là bản Sockets cao nhất mà hệ : Là bản Sockets cao nhất mà hệ
thống có sẵnthống có sẵn The The szDescriptionszDescription and and szSystemStatusszSystemStatus : Được : Được
thiết lập cho những cài đặt đặc biệt của Socketsthiết lập cho những cài đặt đặc biệt của Sockets iMaxSocketsiMaxSockets: Là số Sockets tối đa mà các ứng : Là số Sockets tối đa mà các ứng
dụng có thể mở được. Giá trị là 0 ldụng có thể mở được. Giá trị là 0 làà không bị không bị giới hạn.giới hạn.
iMaxUdpDgiMaxUdpDg: Là kích thước tối đa của một gói : Là kích thước tối đa của một gói tin theo giao thức UDP. Giá trị là 0 thtin theo giao thức UDP. Giá trị là 0 thìì không bị không bị giới hạn.giới hạn.
lpVenrInforlpVenrInfor: là thông tin về nhà cung cấp : là thông tin về nhà cung cấp Windows Sockets:Windows Sockets:
Minh hoạ hiển thị thông tin Minh hoạ hiển thị thông tin về phiên bản của windows về phiên bản của windows
socketsocket#include <winsock2.h>#include <winsock2.h>#include <stdio.h>#include <stdio.h>void main()void main(){{ WSADATA wsd; WSADATA wsd; if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) {{ printf("Failed to load Winsock!\n");printf("Failed to load Winsock!\n"); return;return; }}
printf("Requires Version: printf("Requires Version: %d.",LOBYTE(wsd.wVersion));%d.",LOBYTE(wsd.wVersion));
printf("%d\n",HIBYTE(wsd.wVersion));printf("%d\n",HIBYTE(wsd.wVersion));
printf("Highest Version: printf("Highest Version: %d.",LOBYTE(wsd.wHighVersion));%d.",LOBYTE(wsd.wHighVersion));
printf("%d\n",HIBYTE(wsd.wHighVersion));printf("%d\n",HIBYTE(wsd.wHighVersion));
printf("%s\n",wsd.szDescription);printf("%s\n",wsd.szDescription);
printf("%s\n",wsd.szSystemStatus);printf("%s\n",wsd.szSystemStatus);
printf("Maximixe of Socket can Open:%d\printf("Maximixe of Socket can Open:%d\n",wsd.iMaxSockets);n",wsd.iMaxSockets);
printf("Maximixe of UDP data size:%d\printf("Maximixe of UDP data size:%d\n",wsd.iMaxUdpDg);n",wsd.iMaxUdpDg);
WSACleanup();WSACleanup();
return ;return ;
}}
Các bước để tạo ứng dụng Các bước để tạo ứng dụng và chạy chương trìnhvà chạy chương trình
Bước 1. Tạo ra một ứng dụng kiểu Bước 1. Tạo ra một ứng dụng kiểu console trong Visual C++ 6.0console trong Visual C++ 6.0
Bước 2. Thêm vào ứng dụng một file Bước 2. Thêm vào ứng dụng một file *.cpp*.cpp
Bứoc 3. Gõ đoạn lệnh trên vàoBứoc 3. Gõ đoạn lệnh trên vào Bước 4. Liên kết thư viện lib của Bước 4. Liên kết thư viện lib của
windows sockets vào chương trình: windows sockets vào chương trình: Vào menu Project trỏ đến mục Setting khi Vào menu Project trỏ đến mục Setting khi
hộp thoại được mở ra thì chọn tab Link. hộp thoại được mở ra thì chọn tab Link. Chuyển đễn phía cuối của mục Object/ Chuyển đễn phía cuối của mục Object/ Library Module và gõ thêm dòng ws2_32.lib Library Module và gõ thêm dòng ws2_32.lib
Chú ý về chương trìnhChú ý về chương trình Trong phần đầu của chương trình ta cần Trong phần đầu của chương trình ta cần
thêm dòng lệnh #include <winsock.h>thêm dòng lệnh #include <winsock.h> Hàm MAKEWORD để chuyển 2 byte Hàm MAKEWORD để chuyển 2 byte
thành một từthành một từ Các hàm LOBYTE, và HIBYTE có tác Các hàm LOBYTE, và HIBYTE có tác
dụng nhận lại byte thấp và byte cao của dụng nhận lại byte thấp và byte cao của một từ.một từ.
Ví dụ về kiểm tra tính Ví dụ về kiểm tra tính tương thích của phiên bản tương thích của phiên bản
winsockwinsockif ( (LOBYTE(wsd.wVersion) != if ( (LOBYTE(wsd.wVersion) !=
LOBYTE(wVersionRequested))||LOBYTE(wVersionRequested))||(HIBYTE(wsd.wVersion) != (HIBYTE(wsd.wVersion) !=
HIBYTE(wVersionRequested)) )HIBYTE(wVersionRequested)) ){{
printf(“WinSock doesn’t meet the version printf(“WinSock doesn’t meet the version requirements”);requirements”);
}}ElseElse{{
printf(“WinSock meets the version requirements”);printf(“WinSock meets the version requirements”);}}
2. Đóng Socket2. Đóng Socket
Để đóng Sockets ta sử dụng hàm Để đóng Sockets ta sử dụng hàm WSACleanup. Nguyên mẫu như sau:WSACleanup. Nguyên mẫu như sau:
int WSACleanup(void);int WSACleanup(void); Chú ý:Chú ý:
Với mỗi lời gọi của WSAStartup() cần Với mỗi lời gọi của WSAStartup() cần phải gọi tướng ứng một lời gọi phải gọi tướng ứng một lời gọi WSACleanup() để giải phóng tài nguyên WSACleanup() để giải phóng tài nguyên cho hệ thống.cho hệ thống.
3. Kiểm soát lỗi3. Kiểm soát lỗi
Để nhận mã lỗi ta sử dụng hàm Để nhận mã lỗi ta sử dụng hàm WSAGetLastError. WSAGetLastError. NguyNguyên mẫu như ên mẫu như sau:sau:
int WSAGetLastError();int WSAGetLastError();