Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
106,04 KB
Nội dung
Chương LẬP TRÌNH WINSOCK (Windows Socket) Nội dung Giới thiệu Winsock BSD socket Windows Các hàm hỗ trợ Giới thiệu Winsock Mô tả giao tiếp socket Windows dựa tên tảng BSD socket Tồn hàm Windows API Các hàm chứa 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 Winsock muốn sử dụng Có thể sử dụng MAKEWORD(x,y) với x.y phiên muốn sử dụng lpWSAData: trỏ, trỏ đến cấu trúc WSADATA, hàm điền thông tin liên quan đến thư viện Trả về: thành công Phiên Winsock Nền Windows Windows Windows Windows Windows 95 98 2000/XP/03 95 CE Phiên Winsock 1.1 2.2 2.2 2.2 1.1 Ví dụ: WSAStartup(MAKEWORD(2,2),lpWSAData); Kết thúc Winsock int WSACleanup(void); Hàm khơng có tham số Giá trị trả thành công Mã lỗi nhận hàm: int WSAGetLastError(void) Chương trình sử dụng Winsock #Include WSAStartup() WSACleanup() Mơ hình Client/Server hướng kết nối Winsock Server socket() bind() Winsock Client socket() Address resolution* listen() accept() connect() Address 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); 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ố: af : họ địa chỉ, thường AF_INET type: kiểu socket (SOCK_STREAM, SOCK_DGRAM) Trả : INVALID_SOCKET có lỗi, ngược lại trả miêu tả socket 10 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ố: name : cấu trúc chứa thông tin cổng giao tiếp namelen: độ dài cấu trúc name Trả : SOCK_ERROR có lỗi 11 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 backlog: độ dài hàng đợi Trả : giá trị âm có lỗi 12 Các hàm Winsock sử dụng phía server(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 IP máy client yêu cầu kết nối addrlen: chiều dài addr Trả : socket kết nối với client 13 Các hàm Winsock sử dụng phía client Hàm tạo socket: SOCKET socket(int af,int type,int protocol) (xem hàm tạo socket Server) 14 Các hàm Winsock sử dụng phía client(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 tạo kết nối addr: chứa thông tin địa IP máy server cần thực kết nối addrlen: chiều dài addr Trả : SOCKET_ERROR xảy lỗi 15 Các hàm Winsock sử dụng chung cho client server Hàm gửi 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 liệu buff: đệm chứa liệu cần truyền len: chiều dài liệu chứa buff flags: thường Trả : số lượng byte thật gửi 16 Các hàm Winsock sử dụng chung cho client server Hàm nhận liệu: int recv(SOCKET s,const char FAR* buff, int len,int flags) Tham số: s : socket tạo kết nối để truyền liệu buff: đệm chứa liệu len: số lượng byte muốn nhận, thường chiều dài tối đa buff flags: thường Trả : số lượng byte thật nhận 17 Các hàm Winsock sử dụng chung cho client server Hàm đóng socket: int closesocket(SOCKET s) Tham số: s : socket tạo kết nối để truyền liệu Hàm giải phóng tài nguyên chiếm dụng mơ tả socket s 18 Mơ hình Client/Server hướng không kết nối Winsock Client Winsock Server socket() socket() Address resolution* bind() data recvfrom() sendto()/recevfrom() client addr data sendto() sendto()/recevfrom() 19 Các hàm truyền nhận hướng không kết nối (UDP) Hàm gửi liệu: int sendto(SOCKET s,const char FAR* buff, int len,int flags, const struct sockaddr FAR* addr, int addrlen) Tham số: s : socket cần truyền liệu buff: đệm chứa liệu cần truyền len: chiều dài liệu chứa buff flags: thường addr: địa cần gửi addrlen: chiều dài addr Trả : số lượng byte thật gửi 20 Các hàm truyền nhận hướng không kết nối (UDP) Hàm nhận liệu: int recvfrom(SOCKET s,const char FAR* buff, int len,int flags, const struct sockaddr FAR* addr, int FAR* addrlen) Tham số: s : socket cần truyền liệu buff: đệm chứa liệu nhận len: chiều dài liệu muốn nhận, thường chiều dài tối đa buff flags: thường addr: địa host vừa gửi liệu addrlen: chiều dài addr Trả : số lượng byte thật nhận 21 ... chứa DLL Ứng dụng 16bit: winsock. dll, winsock. lib Ứng dụng 32 bit: wsock32.dll, wsock32.lib File header: winsock. h, winsock2 .h Khởi tạo môi trường Winsock int WSAStartup(WORD wVersionRequested,... WSAGetLastError(void) Chương trình sử dụng Winsock #Include WSAStartup() WSACleanup() Mơ hình Client/Server hướng kết nối Winsock Server socket() bind() Winsock Client socket()... hàm Winsock sử dụng chung cho client server Hàm gửi 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 liệu buff: đệm chứa liệu