Chương 3 LẬP TRÌNH WINSOCK (Windows Socket)

Chia sẻ: TRẦN THỊ THANH HẰNG | Ngày: | Loại File: PDF | Số trang:21

0
484
lượt xem
193
download

Chương 3 LẬP TRÌNH WINSOCK (Windows Socket)

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 3 LẬP TRÌNH WINSOCK (Windows Socket) 1 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 Ứng dụng 16bit: winsock.dll, winsock.lib Ứng dụng 32bit: wsock32.dll, wsock32.lib File header: winsock.h, winsock2.h 3 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 x.y là phiên bản muốn sử dụng lpWSAData: là con trỏ, trỏ đến cấu trúc WSADATA,...

Chủ đề:
Lưu

Nội dung Text: Chương 3 LẬP TRÌNH WINSOCK (Windows Socket)

  1. Chương 3 LẬP TRÌNH WINSOCK (Windows Socket) 1
  2. Nội dung  Giới thiệu Winsock  BSD socket trong Windows  Các hàm hỗ trợ 2
  3. 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  Ứng dụng 16bit: winsock.dll, winsock.lib  Ứng dụng 32bit: wsock32.dll, wsock32.lib  File header: winsock.h, winsock2.h 3
  4. 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 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 4
  5. Phiê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); 5
  6. Kế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) 6
  7. Chương trình sử dụng Winsock #Include WSAStartup() ... ... ... WSACleanup() 7
  8. Mô hình Client/Server hướng kết nối Winsock Server Winsock Client socket() socket() bind() Address resolution* listen() accept() connect() 8
  9. 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); 9
  10. 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 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 10
  11. 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ủ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 11
  12. 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 của hàng đợi  Trả về : giá trị âm nếu có lỗi 12
  13. 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 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 13
  14. 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 của Server) 14
  15. 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 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 15
  16. Các hàm Winsock sử dụng chung cho 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 16
  17. Các hàm Winsock sử dụng chung cho client và server  Hàm nhận dữ 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 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  Trả về : số lượng byte thật sự đã nhận đi 17
  18. Các hàm Winsock sử dụng chung cho client và server  Hàm đóng socket: int closesocket(SOCKET s)  Tham số:  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 18
  19. Mô hình Client/Server hướng không kết nối Winsock Server Winsock Client socket() socket() Address bind() resolution* data recvfrom() sendto() client addr sendto()/recevfrom() sendto()/recevfrom() data 19
  20. Cá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)  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  addrlen: chiều dài addr  Trả về : số lượng byte thật sự đã gửi đi 20
Đồng bộ tài khoản