Thông tin tài liệu:
Chương 3LẬP TRÌNH WINSOCK (Windows Socket)1Nội dungGiới thiệu Winsock BSD socket trong Windows Các hàm hỗ trợ2Giới thiệu WinsockMô 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 Ứng dụng 16bit: winsock.dll, winsock.lib Ứng dụng 32bit: wsock32.dll, wsock32.lib File header: winsock.h, winsock2.h3Khởi tạo môi trường Winsockint 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 x.y là phiên bản muốn sử dụng lpWSAData: là con trỏ, trỏ đến cấu trúc WSADATA,...
Nội dung trích xuất từ tài liệu:
Chương 3 LẬP TRÌNH WINSOCK (Windows Socket) Chương 3 LẬP TRÌNH WINSOCK (Windows Socket) 1Nội dung Giới thiệu Winsock BSD socket trong Windows Các hàm hỗ trợ 2Giớ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 Ứng dụng 16bit: winsock.dll, winsock.lib Ứng dụng 32bit: wsock32.dll, wsock32.lib File header: winsock.h, winsock2.h 3Khởi tạo môi trường Winsockint 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 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 4Phiên bản Winsock Nền Phiên bản Winsock Windows 95 1.1 Windows 98 2.2 Windows 2000/XP/03 2.2 Windows 95 2.2 Windows CE 1.1 Ví dụ: WSAStartup(MAKEWORD(2,2),lpWSAData); 5Kết thúc Winsock int WSACleanup(void); Hàm không có tham số Giá trị trả về là 0 nếu thành công Mã lỗi có thể nhận bằng hàm: int WSAGetLastError(void) 6Chương trình sử dụng Winsock #Include WSAStartup() ... ... ... WSACleanup() 7Mô hình Client/Server hướng kếtnối Winsock Server Winsock Client socket() socket() bind() Address resolution* listen() accept() connect() 8Address resolution#define MY_PORT 1001#denfine SERVER_ADDR “192.16.1.1”struct sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_addr.S_addr=inet_addr(SERVER_ADDR);server_addr.sin_port = htons(MY_PORT); 9Các hàm Winsock sử dụng phíaserver Hàm tạo socket: SOCKET socket(int af,int type,int protocol) 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 10Các hàm Winsock sử dụng phíaserver(2) Hàm kết nối socket đến port: int bind(SOCKET s,const struct sockaddr FAR* name,int namelen) 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 11Các hàm Winsock sử dụng phíaserver(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 backlog: độ dài của hàng đợi Trả về : giá trị âm nếu có lỗi 12Các hàm Winsock sử dụng phíaserver(4) Hàm chấp nhận kết nối đến: SOCKET accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen) Tham số: 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 Trả về : socket được kết nối với client 13Các hàm Winsock sử dụng phíaclient Hàm tạo socket: SOCKET socket(int af,int type,int protocol)(xem hàm tạo socket của Server) 14Các hàm Winsock sử dụng phíaclient(2) Hàm tạo kết nối đến server: int connect(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen) Tham số: 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 Trả về : SOCKET_ERROR nếu xảy ra lỗi 15Các hàm Winsock sử dụng chungcho client và server Hàm gửi dữ liệu: int send(SOCKET s,const char FAR* buff, int len,int flags) 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 16Các hàm Winsock sử dụng chungcho client và server Hàm nhận dữ liệu: int recv(SOCKET s,const char FAR* buff ...