tailieunhanh - 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 .

TỪ KHÓA LIÊN QUAN