Bài giảng Lập trình mạng: Bài 2 - Bùi Trọng Tùng
Số trang: 38
Loại file: pdf
Dung lượng: 452.74 KB
Lượt xem: 16
Lượt tải: 0
Xem trước 4 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Lập trình mạng - Bài 2: Bắt đầu với lập trình WinSock" cung cấp cho người học các kiến thức: Giới thiệu một số hàm lập trình WinSock cơ bản, xây dựng một ứng dụng TCP cơ bản, xây dựng một ứng dụng UDP cơ bản, thiết kế giao thức ứng dụng. Mời các bạn cùng tham khảo.
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình mạng: Bài 2 - Bùi Trọng TùngBÀI 2.BẮT ĐẦU VỚI LẬP TRÌNH WINSOCK1Nội dung• Giới thiệu một số hàm lập trình WinSock cơ bản• Xây dựng một ứng dụng TCP cơ bản• Xây dựng một ứng dụng UDP cơ bản• Thiết kế giao thức ứng dụng211. MỘT SỐ HÀM CƠ BẢN3Khởi tạo WinSock• WinSock cần được khởi tạo ở đầu mỗi ứng dụng trướckhi có thể sử dụng• Hàm WSAStartup sẽ làm nhiệm khởi tạoint WSAStartup(WORD wVersionRequested,LPWSADATAlpWSAData);• wVersionRequested: [IN] phiên bản WinSock cần dùng.• lpWSAData: [OUT] con trỏ chứa thông tin về WinSock cài đặt tronghệ thống.• Giá trị trả về:• Thành công: 0• Thất bại: SOCKET_ERROR42Giải phóng WinSock• Ứng dụng khi kết thúc sử dụng WinSock có thể gọi hàmsau để giải phóng tài nguyên về cho hệ thốngint WSACleanup(void);• Giá trị trả về:• Thành công: 0• Thất bại: SOCKET_ERROR// Initiates Winsock v2.2WSADATA wsaData;WORDwVersion = MAKEWORD(2,2);WSAStartup(wVersion,&wsaData);//do something with WinSock//...//Terminates use of the WinSockWSACleanup();5Xác định lỗi• Phần lớn các hàm của WinSock nếu thành công đều trảvề 0.• Nếu thất bại, giá trị trả về của hàm là SOCKET_ERROR.• Ứng dụng có thể lấy mã lỗi gần nhất bằng hàmint WSAGetLastError(void);• Tra cứu lỗi với công cụ Error Lookup trong Visual Studio63Địa chỉ socket• Xác định địa chỉ• WinSock sử dụng cấu trúc sockaddr_in để lưu địa chỉ của socket• Địa chỉ IPv6: sockaddr_in6• Ứng dụng cần khởi tạo thông tin trong cấu trúc nàystruct sockaddr_in{short sin_family; // Họ giao thứcu_short sin_port; // Số hiệu cổng(big-endian)struct in_addr sin_addr; // Địa chỉ IPv4char sin_zero[8];// Không sử dụng};struct in_addr {unsigned long s_addr;};7Các hàm hỗ trợ xử lý địa chỉ socket• Chuyển đổi địa chỉ IP dạng xâu sang số nguyên 32 bitunsigned long inet_addr(const char FAR *cp);• Chuyển đổi địa chỉ từ dạng in_addr sang dạng xâuchar FAR *inet_ntoa(struct in_addr in);• Chuyển đổi host order => big-endian (network order)u_long htonl(u_long hostlong); //4 byte-valueu_short htons(u_short hostshort); //2 byte-value• Chuyển đổi big-endian => host orderu_long ntohl(u_long netlong); //4 byte-valueu_short ntohs(u_short netshort); //2 byte-value84Các hàm hỗ trợ xử lý địa chỉ socket• Phân giải tên miền: getaddrinfo()• Cần thêm tệp tiêu đề ws2tcpip.hint getaddrinfo(const char *nodename, //[IN] Tên miền hoặc địa chỉ IPconst char *servname, //[IN] Tên dịch vụ hoặc cổngconst struct addrinfo *hints, //[IN] cấu trúc gợi ýstruct addrinfo **res //[OUT] danh sách liên kết//chứa thông tin về địa chỉ);• Giải phóng thông tin chứa trong kết quả:void freeaddrinfo(struct addrinfor *ai)• Các hàm tương tự: getnameinfo(), gethostbyname(),gethostbyaddr(), gethostname(), WSAAddressToString(),WSAStringToAddress()9Cấu trúc addrinfotypedef struct addrinfo {intai_flags;//tùy chọn của hàm//getaddrinfo()intai_family;//họ giao thứcintai_socktype; //kiểu socketintai_protocol; //giao thức tầng giao vậnsize_tai_addrlen; //kích thước cấu trúcchar*ai_canonname; //tên miền phụstruct sockaddr *ai_addr; //địa chỉ IPv4struct addrinfo *ai_next; //phần tử tiếp theo} ADDRINFOA, *PADDRINFOA;105
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình mạng: Bài 2 - Bùi Trọng TùngBÀI 2.BẮT ĐẦU VỚI LẬP TRÌNH WINSOCK1Nội dung• Giới thiệu một số hàm lập trình WinSock cơ bản• Xây dựng một ứng dụng TCP cơ bản• Xây dựng một ứng dụng UDP cơ bản• Thiết kế giao thức ứng dụng211. MỘT SỐ HÀM CƠ BẢN3Khởi tạo WinSock• WinSock cần được khởi tạo ở đầu mỗi ứng dụng trướckhi có thể sử dụng• Hàm WSAStartup sẽ làm nhiệm khởi tạoint WSAStartup(WORD wVersionRequested,LPWSADATAlpWSAData);• wVersionRequested: [IN] phiên bản WinSock cần dùng.• lpWSAData: [OUT] con trỏ chứa thông tin về WinSock cài đặt tronghệ thống.• Giá trị trả về:• Thành công: 0• Thất bại: SOCKET_ERROR42Giải phóng WinSock• Ứng dụng khi kết thúc sử dụng WinSock có thể gọi hàmsau để giải phóng tài nguyên về cho hệ thốngint WSACleanup(void);• Giá trị trả về:• Thành công: 0• Thất bại: SOCKET_ERROR// Initiates Winsock v2.2WSADATA wsaData;WORDwVersion = MAKEWORD(2,2);WSAStartup(wVersion,&wsaData);//do something with WinSock//...//Terminates use of the WinSockWSACleanup();5Xác định lỗi• Phần lớn các hàm của WinSock nếu thành công đều trảvề 0.• Nếu thất bại, giá trị trả về của hàm là SOCKET_ERROR.• Ứng dụng có thể lấy mã lỗi gần nhất bằng hàmint WSAGetLastError(void);• Tra cứu lỗi với công cụ Error Lookup trong Visual Studio63Địa chỉ socket• Xác định địa chỉ• WinSock sử dụng cấu trúc sockaddr_in để lưu địa chỉ của socket• Địa chỉ IPv6: sockaddr_in6• Ứng dụng cần khởi tạo thông tin trong cấu trúc nàystruct sockaddr_in{short sin_family; // Họ giao thứcu_short sin_port; // Số hiệu cổng(big-endian)struct in_addr sin_addr; // Địa chỉ IPv4char sin_zero[8];// Không sử dụng};struct in_addr {unsigned long s_addr;};7Các hàm hỗ trợ xử lý địa chỉ socket• Chuyển đổi địa chỉ IP dạng xâu sang số nguyên 32 bitunsigned long inet_addr(const char FAR *cp);• Chuyển đổi địa chỉ từ dạng in_addr sang dạng xâuchar FAR *inet_ntoa(struct in_addr in);• Chuyển đổi host order => big-endian (network order)u_long htonl(u_long hostlong); //4 byte-valueu_short htons(u_short hostshort); //2 byte-value• Chuyển đổi big-endian => host orderu_long ntohl(u_long netlong); //4 byte-valueu_short ntohs(u_short netshort); //2 byte-value84Các hàm hỗ trợ xử lý địa chỉ socket• Phân giải tên miền: getaddrinfo()• Cần thêm tệp tiêu đề ws2tcpip.hint getaddrinfo(const char *nodename, //[IN] Tên miền hoặc địa chỉ IPconst char *servname, //[IN] Tên dịch vụ hoặc cổngconst struct addrinfo *hints, //[IN] cấu trúc gợi ýstruct addrinfo **res //[OUT] danh sách liên kết//chứa thông tin về địa chỉ);• Giải phóng thông tin chứa trong kết quả:void freeaddrinfo(struct addrinfor *ai)• Các hàm tương tự: getnameinfo(), gethostbyname(),gethostbyaddr(), gethostname(), WSAAddressToString(),WSAStringToAddress()9Cấu trúc addrinfotypedef struct addrinfo {intai_flags;//tùy chọn của hàm//getaddrinfo()intai_family;//họ giao thứcintai_socktype; //kiểu socketintai_protocol; //giao thức tầng giao vậnsize_tai_addrlen; //kích thước cấu trúcchar*ai_canonname; //tên miền phụstruct sockaddr *ai_addr; //địa chỉ IPv4struct addrinfo *ai_next; //phần tử tiếp theo} ADDRINFOA, *PADDRINFOA;105
Tìm kiếm theo từ khóa liên quan:
Bài giảng Lập trình mạng Lập trình mạng Mạng máy tính Lập trình WinSock Hàm lập trình WinSock cơ bản Thiết kế giao thức ứng dụng Xây dựng một ứng dụng UDP cơ bảnGợi ý tài liệu liên quan:
-
Giáo án Tin học lớp 9 (Trọn bộ cả năm)
149 trang 262 0 0 -
Ngân hàng câu hỏi trắc nghiệm môn mạng máy tính
99 trang 250 1 0 -
Giáo trình Hệ thống mạng máy tính CCNA (Tập 4): Phần 2
102 trang 242 0 0 -
47 trang 237 3 0
-
Đề cương chi tiết học phần Thiết kế và cài đặt mạng
3 trang 234 0 0 -
80 trang 213 0 0
-
122 trang 210 0 0
-
Giáo trình Hệ thống mạng máy tính CCNA (Tập 4): Phần 1
122 trang 209 0 0 -
Giáo trình môn học/mô đun: Mạng máy tính (Ngành/nghề: Quản trị mạng máy tính) - Phần 1
68 trang 199 0 0 -
Giáo trình căn bản về mạng máy tính -Lê Đình Danh 2
23 trang 186 0 0