chuong ii_1. gioi thieu windows socket

19
I. TỔNG QUAN VỀ I. TỔNG QUAN VỀ WINDOWS SOCKET WINDOWS SOCKET 1. 1. Gi Gi ới thiệu chung về windows ới thiệu chung về windows socket socket 2. 2. Ki Ki ến trúc của windows socket ến trúc của windows socket 3. 3. M M ột số khái niệm liên quan ột số khái niệm liên quan

Upload: jimy-nguyen

Post on 26-Oct-2014

49 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Chuong II_1. Gioi Thieu Windows Socket

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

Page 2: Chuong II_1. Gioi Thieu Windows Socket

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

Page 3: Chuong II_1. Gioi Thieu Windows Socket

Các phiên bản của windows Các phiên bản của windows socketsocket

Page 4: Chuong II_1. Gioi Thieu Windows Socket

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

Page 5: Chuong II_1. Gioi Thieu 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

Page 6: Chuong II_1. Gioi Thieu Windows Socket

2. Kiến trúc của Windows 2. Kiến trúc của Windows socketssockets

Page 7: Chuong II_1. Gioi Thieu Windows Socket

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ỉ đó.

Page 8: Chuong II_1. Gioi Thieu Windows Socket

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

Page 9: Chuong II_1. Gioi Thieu Windows Socket

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

););

Page 10: Chuong II_1. Gioi Thieu Windows Socket

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.

Page 11: Chuong II_1. Gioi Thieu Windows Socket

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;

Page 12: Chuong II_1. Gioi Thieu Windows Socket

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:

Page 13: Chuong II_1. Gioi Thieu Windows Socket

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; }}

Page 14: Chuong II_1. Gioi Thieu Windows Socket

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 ;

}}

Page 15: Chuong II_1. Gioi Thieu Windows Socket

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

Page 16: Chuong II_1. Gioi Thieu Windows Socket

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ừ.

Page 17: Chuong II_1. Gioi Thieu Windows Socket

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”);}}

Page 18: Chuong II_1. Gioi Thieu Windows Socket

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.

Page 19: Chuong II_1. Gioi Thieu Windows Socket

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();