Trả về : INVALID_SOCKET nếu có lỗi, ngược lại trả về miêu tả socket mới. Các hàm Winsock sử dụng phía server(2)[r]
Trang 1Chương 3
1
LẬP TRÌNH WINSOCK
(Windows Socket)
Nội dung
Giới thiệu Winsock
BSD socket trong Windows
Các hàm hỗ trợ
2
Giới thiệu Winsock
Mô tả giao tiếp socket trong Windows
dựa tên nền tảng của BSD socket
Tồn tại dưới các hàm Windows API
Các hàm cơ bản được chứa trong DLL
Các hàm cơ bản được chứa trong DLL
Ứng dụng 16bit: winsock.dll, winsock.lib
Ứng dụng 32bit: wsock32.dll,
wsock32.lib
File header: winsock.h, winsock2.h
Khởi tạo môi trường Winsock
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
Tham số
wVersionRequested: phiên bản Winsock muốn
sử dụng Có thể sử dụng MAKEWORD(x,y) với
sử dụng Có thể sử dụng MAKEWORD(x,y) với x.y là phiên bản muốn sử dụng
lpWSAData: là con trỏ, trỏ đến cấu trúc WSADATA, hàm này sẽ điền thông tin liên quan đến thư viện
Trả về: 0 nếu thành công
Trang 2Phiên bản Winsock
Winsock Windows 95 1.1
Windows 98 2.2
Windows 2000/XP/03 2.2
5
Windows 2000/XP/03 2.2
Windows 95 2.2
Windows CE 1.1
Ví dụ: WSAStartup(MAKEWORD(2,2),lpWSAData);
Kết thúc Winsock
int WSACleanup(void);
Giá trị trả về là 0 nếu thành công
6
Mã lỗi có thể nhận bằng hàm:
int WSAGetLastError(void)
Chương trình sử dụng Winsock
#Include <winsock.h>
WSAStartup()
WSACleanup()
Mô hình Client/Server hướng kết nối
socket() socket() Winsock Server Winsock Client
bind()
listen()
accept()
Address resolution*
connect()
Trang 3Address resolution
#define MY_PORT 1001
#denfine SERVER_ADDR “192.16.1.1”
struct sockaddr_in server_addr;
9
server_addr.sin_family = AF_INET;
server_addr.sin_addr.S_addr=inet_addr(SERVER_ADDR);
server_addr.sin_port = htons(MY_PORT);
Các hàm Winsock sử dụng phía server
Hàm tạo socket:
SOCKET socket(int af,int type,int protocol)
Tham số:
10
Tham số:
af : họ địa chỉ, thường là AF_INET
type: kiểu socket (SOCK_STREAM, SOCK_DGRAM)
Trả về : INVALID_SOCKET nếu có lỗi, ngược lại trả về miêu tả socket mới
Các hàm Winsock sử dụng phía
server(2)
Hàm kết nối socket đến port:
int bind(SOCKET s,const struct sockaddr
FAR* name,int namelen)
Tham số:
Tham số:
name : cấu trúc chứa thông tin của cổng giao
tiếp
namelen: độ dài của cấu trúc name
Trả về : SOCK_ERROR nếu có lỗi
Các hàm Winsock sử dụng phía server(3)
Hàm tạo hàng đợi chờ kết nối đến:
int listen(SOCKET s, int backlog)
Tham số:
s : socket cần tạo hàng đợi
s : socket cần tạo hàng đợi
backlog: độ dài của hàng đợi
Trả về : giá trị âm nếu có lỗi