Bài giảng Lập trình mạng: Bài 4 - Bùi Trọng Tùng

Bài giảng "Lập trình mạng - Bài 4: Lập trình WinSock nâng cao" cung cấp cho người học các kiến thức: Xây dựng ứng dụng yêu cầu lớn (Scalable Apps), sử dụng raw socket, xây dựng ứng dụng broadcast và multicast. . | BÀI 4. LẬP TRÌNH WINSOCK NÂNG CAO 1 Nội dung • Xây dựng ứng dụng yêu cầu lớn (Scalable Apps) • Sử dụng raw socket • Xây dựng ứng dụng broadcast và multicast 2 1 1. XÂY DỰNG ỨNG DỤNG YÊU CẦU LỚN 3 Ứng dụng yêu cầu lớn(Scalable Apps) • Ứng dụng cần xử lý số lượng kết nối, yêu cầu rất lớn • Sử dụng các hàm WinSock API hiệu năng cao • AcceptEx() • ConnectEx() • TransmitFile() • TransmitPacket() • • Sử dụng kỹ thuật vào ra Overlapped I/O với Completion Port • Cần có các kỹ thuật kiểm soát số lượng kết nối, quản lý tài nguyên 4 2 Hàm AcceptEx() • Chấp nhận một kết nối và (có thể) nhận gói tin đầu tiên • Bộ đệm chứa dữ liệu nhận được và thông tin địa chỉ • sAcceptSocket phải ở trạng thái chưa kết nối • Trả về TRUE nếu thành công BOOL AcceptEx( SOCKET sListenSocket, //[IN] Socket nghe yêu cầu SOCKET sAcceptSocket, //[IN] Socket chấp nhận kết nối PVOID lpOutputBuffer, //[IN] Bộ đệm nhận dữ liệu DWORD dwReceiveDataLength, //[IN] Kích thước bộ đệm DWORD dwLocalAddressLength,//[IN] Kích thước phần bộ đệm // chứa địa chỉ local socket DWORD dwRemoteAddressLength, //[IN] Kích thước phần bộ đệm // chứa địa chỉ remote socket LPDWORD lpdwBytesReceived, //[OUT] Kích thước dữ // liệu đã nhận LPOVERLAPPED lpOverlapped //[IN] Kết quả vào ra ); 5 Sử dụng AcceptEx() SOCKET listenSock, accSock; HANDLE hCompPort; LPFN_ACCEPTEX lpfnAcceptEx=NULL; GUID GuidAcceptEx=WSAID_ACCEPTEX; PER_IO_DATA ol; SOCKADDR_IN saLocal; DWORD dwBytes; char buf[1024]; int buflen=1024; // Create the completion port hCompPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, (ULONG_PTR)0, 0); // Create the listening socket listenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Associate listening socket to completion port CreateIoCompletionPort((HANDLE) listenSock, hCompPort, (ULONG_PTR)0, 0); 6 3 Sử dụng AcceptEx() // Bind the socket to the local port = AF_INET; = htons(5150); = htonl(INADDR_ANY); bind(listenSock, (SOCKADDR .

Không thể tạo bản xem trước, hãy bấm tải xuống
TỪ KHÓA LIÊN QUAN
TÀI LIỆU MỚI ĐĂNG
170    241    5    02-06-2024
7    79    1    02-06-2024
31    90    2    02-06-2024
Đã phát hiện trình chặn quảng cáo AdBlock
Trang web này phụ thuộc vào doanh thu từ số lần hiển thị quảng cáo để tồn tại. Vui lòng tắt trình chặn quảng cáo của bạn hoặc tạm dừng tính năng chặn quảng cáo cho trang web này.