Khởi tạo môi trường Winsockint WSAStartupWORD wVersionRequested, LPWSADATA 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ề:
Trang 1Chương 3
LẬP TRÌNH WINSOCK
(Windows Socket)
Trang 2Nội dung
Trang 3Giới thiệu Winsock
dựa tên nền tảng của BSD socket
Ứng dụng 16bit: winsock.dll, winsock.lib
Ứng dụng 32bit: wsock32.dll,
wsock32.lib
Trang 4Khởi tạo môi trường Winsock
int WSAStartup(WORD wVersionRequested, LPWSADATA
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 8Mô hình Client/Server hướng kết
nối
bind() listen() accept()
Address resolution*
connect()
Trang 10 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
Trang 11Các hàm Winsock sử dụng phía
server(2)
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
Trang 12Các hàm Winsock sử dụng phía
server(3)
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
Trang 13 s : socket lắng nghe kết nối
addr: chứa thông tin địa chỉ IP của máy client
đang yêu cầu kết nối
addrlen: chiều dài của addr
Trang 15 s : socket sẽ tạo kết nối
addr: chứa thông tin địa chỉ IP của máy server
cần thực hiện kết nối
addrlen: chiều dài của addr
Trang 16Các hàm Winsock sử dụng chung
cho client và server
int send(SOCKET s,const char FAR* buff,
int len,int flags)
Tham số:
Tham số:
s : socket đã tạo kết nối để truyền dữ liệu
buff: bộ đệm chứa dữ liệu cần truyền
len: chiều dài của dữ liệu chứa trong buff
flags: thường là 0
Trả về : số lượng byte thật sự đã gửi đi
Trang 17Các hàm Winsock sử dụng chung
cho client và server
int recv(SOCKET s,const char FAR* buff,
int len,int flags)
Tham số:
Tham số:
s : socket đã tạo kết nối để truyền dữ liệu
buff: bộ đệm sẽ chứa dữ liệu
len: số lượng byte muốn nhận, thường là chiều
dài tối đa của buff
flags: thường là 0
Trang 18 s : socket đã tạo kết nối để truyền dữ liệu
s : socket đã tạo kết nối để truyền dữ liệu
Hàm này giải phóng tài nguyên chiếm
dụng bởi mô tả socket s
Trang 19Mô hình Client/Server hướng không kết nối
Address
bind() recvfrom() sendto()/recevfrom()
sendto()
sendto()/recevfrom() data
data client addr
Address resolution*
Trang 20Các hàm truyền nhận hướng không kết nối (UDP)
Hàm gửi dữ liệu:
int sendto(SOCKET s,const char FAR* buff,
int len,int flags,const struct sockaddr FAR* addr,int addrlen)
int addrlen)
Tham số:
s : socket cần truyền dữ liệu
buff: bộ đệm chứa dữ liệu cần truyền
len: chiều dài của dữ liệu chứa trong buff
flags: thường là 0
addr: địa chỉ cần gửi
Trang 21Các hàm truyền nhận hướng không kết nối (UDP)
Hàm nhận dữ liệu:
int recvfrom(SOCKET s,const char FAR* buff,
int len,int flags, const struct sockaddr FAR* addr, int FAR* addrlen)
Tham số:
Tham số:
s : socket cần truyền dữ liệu
buff: bộ đệm chứa dữ liệu sẽ nhận
len: chiều dài của dữ liệu muốn nhận, thường là chiều
dài tối đa của buff
flags: thường là 0
addr: địa chỉ host vừa gửi dữ liệu
addrlen: chiều dài addr