![Phân tích tư tưởng của nhân dân qua đoạn thơ: Những người vợ nhớ chồng… Những cuộc đời đã hóa sông núi ta trong Đất nước của Nguyễn Khoa Điềm](https://timtailieu.net/upload/document/136415/phan-tich-tu-tuong-cua-nhan-dan-qua-doan-tho-039-039-nhung-nguoi-vo-nho-chong-nhung-cuoc-doi-da-hoa-song-nui-ta-039-039-trong-dat-nuoc-cua-nguyen-khoa-136415.jpg)
Bài giảng Lập trình mạng: Bài 3 - Bùi Trọng Tùng (tiếp)
Số trang: 25
Loại file: pdf
Dung lượng: 277.00 KB
Lượt xem: 5
Lượt tải: 0
Xem trước 3 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 3: Các chế độ vào ra trên WinSock" cung cấp cho người học các kiến thức: Kỹ thuật vào ra theo sự kiện, kỹ thuật Overlapped, kỹ thuật vào ra trên Completion Port. Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình mạng: Bài 3 - Bùi Trọng Tùng (tiếp)BÀI 3.CÁC CHẾ ĐỘ VÀO RA TRÊN WINSOCK(TIẾP)1Nội dung• Chế độ vào ra blocking và non-blocking• Kỹ thuật đa luồng• Kỹ thuật thăm dò• Kỹ thuật vào ra theo thông báo• Kỹ thuật vào ra theo sự kiện• Kỹ thuật Overlapped• Kỹ thuật vào ra trên Completion Port215. KỸ THUẬT VÀO RA THEO SỰ KIỆN3Kỹ thuật vào ra theo sự kiện• Vào ra bất đồng bộ tương tự WSAAsyncSelect• Hàm WSAEventSelect() được sử dụng để gắn một bộ bắt sự kiệnWSAEVENT với mỗi socket• Khi sự kiện xảy ra, đối tượng WSAEVENT chuyển từ trạng thái chưabáo hiệu(non-signaled) sang đã báo hiệu(signaled)• Tạo đối tượng WSAEVENTWSAEVENT WSACreateEvent(void);• Sau khi xử lý sự kiện, cần chuyển đối tượng WSAEVENT trở lại trạngthái chưa báo hiệu:BOOL WSAResetEvent(WSAEVENT hEvent);• Hủy đối tượng sự kiệnBOOL WSACloseEvent(WSAEVENT hEvent);42Kỹ thuật vào ra theo sự kiệnWSAEVENT objectmainthreadrunmainthreadwait foreventhandleeventcallwinsockoperationfailwould blockreturnnonsignaledwinsock signalseventsignaledcallsucceedsmainthreadcontinuereturnwinsockoperationtime5Hàm WSAEventSelect()• Gắn bộ bắt sự kiện vào socket: WSAEventSelect()• Chuyển socket sang chế độ vào ra không chặn dừng(non-blocking)• Trả về:• Thành công: 0• Lỗi: SOCKET_ERRORint WSAEventSelect(SOCKET s,// [IN] Socket được theo dõi sự kiệnWSAEVENT hEventObject,// [IN] Bộ bắt sự kiện// WSAEVENT gắn với socketlong lEvent// [IN] Mặt nạ xác định các sự// kiện cần theo dõi);63Hàm WSAWaitForMultipleEvents()• Đợi các sự kiện xảy ra trên các đối tượng WSAEVENT• Trả về khi có một bộ bắt sự kiện bất kỳ chuyển sang trạng tháibáo hiệu hoặc có time-out, hoặc thủ tục xử lý vào ra thực thiDWORD WSAWaitForMultipleEvents(DWORD cEvents,// [IN] Số lượng bộ bắt sự kiện cần đợiconst WSAEVENT FAR * lphEvents,// [IN] Các bộ bắt sự kiệnBOOL fWaitAll,//[IN] Đợi tất cả các bộ bắt sự kiện?DWORD dwTimeout, //[IN] Thời gian chờ tối đa (ms)BOOL fAlertable//[IN] Thiết lập là FALSE• SốbộbắtsựkiệnWSA_MAXIMUM_WAIT_EVENTS(=64)• Giá trị trả về:tốiđa:• Thất bại: WSA_WAIT_FAILED• Time-out: WSA_WAIT_TIMEOUT• Thành công: Chỉ số bộ bắt sự kiện nhỏ nhất đã chuyển trạng thái +WSA_WAIT_EVENT_07Hàm WSAEnumNetworkEvents()• Xác định các sự kiện xảy ra trên socketint WSAEnumNetworkEvents(SOCKET s,WSAEVENT hEventObject,//[IN] Socket muốn thăm dò//[IN] Bộ bắt sự kiện gắn với// socketLPWSANETWORKEVENTS lpNetworkEvents //[OUT] Cấu trúc chứa//mã sự kiện);• Cấu trúc WSANETWORKEVENTStypedef struct _WSANETWORKEVENTS{long lNetworkEvents; //Mặt nạ xác định sự kiện xảy raint iErrorCode[FD_MAX_EVENTS]; //Mảng các mã lỗi} WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;• Chỉ số kiểm tra mã lỗi có dạng FD_XXX_BIT• Nếu iErrorCode[FD_XXX_BIT] != 0 có lỗi xảy ra với sự kiệnFD_XXX84Sử dụng kỹ thuật vào ra theo sự kiện• socks[]: Mảng chứa giá trị các socket• events[]: Mảng các bộ nghe sự kiện gắn với socket• Bộ nghe events[i] gắn với socket socks[i]9Sử dụng WSAEventSelect()DWORD nEvents = 0;DWORD i, index;SOCKET socks[WSA_MAXIMUM_WAIT_EVENTS];WSAEVENT events [WSA_MAXIMUM_WAIT_EVENTS], newEvent;WSANETWORKEVENTS sockEvent;//Construct listenning socketSOCKET listenSock;listenSock = socket(...);//create new eventsnewEvent = WSACreateEvent();// Associate event types FD_ACCEPT and FD_CLOSE// with the listening socket and newEventWSAEventSelect(listenSock, NewEvent, FD_ACCEPT | FD_CLOSE);socks[0] = listenSock;events[0] = newEvent;nEvents ++;// Call bind(), listen()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 3 - Bùi Trọng Tùng (tiếp)BÀI 3.CÁC CHẾ ĐỘ VÀO RA TRÊN WINSOCK(TIẾP)1Nội dung• Chế độ vào ra blocking và non-blocking• Kỹ thuật đa luồng• Kỹ thuật thăm dò• Kỹ thuật vào ra theo thông báo• Kỹ thuật vào ra theo sự kiện• Kỹ thuật Overlapped• Kỹ thuật vào ra trên Completion Port215. KỸ THUẬT VÀO RA THEO SỰ KIỆN3Kỹ thuật vào ra theo sự kiện• Vào ra bất đồng bộ tương tự WSAAsyncSelect• Hàm WSAEventSelect() được sử dụng để gắn một bộ bắt sự kiệnWSAEVENT với mỗi socket• Khi sự kiện xảy ra, đối tượng WSAEVENT chuyển từ trạng thái chưabáo hiệu(non-signaled) sang đã báo hiệu(signaled)• Tạo đối tượng WSAEVENTWSAEVENT WSACreateEvent(void);• Sau khi xử lý sự kiện, cần chuyển đối tượng WSAEVENT trở lại trạngthái chưa báo hiệu:BOOL WSAResetEvent(WSAEVENT hEvent);• Hủy đối tượng sự kiệnBOOL WSACloseEvent(WSAEVENT hEvent);42Kỹ thuật vào ra theo sự kiệnWSAEVENT objectmainthreadrunmainthreadwait foreventhandleeventcallwinsockoperationfailwould blockreturnnonsignaledwinsock signalseventsignaledcallsucceedsmainthreadcontinuereturnwinsockoperationtime5Hàm WSAEventSelect()• Gắn bộ bắt sự kiện vào socket: WSAEventSelect()• Chuyển socket sang chế độ vào ra không chặn dừng(non-blocking)• Trả về:• Thành công: 0• Lỗi: SOCKET_ERRORint WSAEventSelect(SOCKET s,// [IN] Socket được theo dõi sự kiệnWSAEVENT hEventObject,// [IN] Bộ bắt sự kiện// WSAEVENT gắn với socketlong lEvent// [IN] Mặt nạ xác định các sự// kiện cần theo dõi);63Hàm WSAWaitForMultipleEvents()• Đợi các sự kiện xảy ra trên các đối tượng WSAEVENT• Trả về khi có một bộ bắt sự kiện bất kỳ chuyển sang trạng tháibáo hiệu hoặc có time-out, hoặc thủ tục xử lý vào ra thực thiDWORD WSAWaitForMultipleEvents(DWORD cEvents,// [IN] Số lượng bộ bắt sự kiện cần đợiconst WSAEVENT FAR * lphEvents,// [IN] Các bộ bắt sự kiệnBOOL fWaitAll,//[IN] Đợi tất cả các bộ bắt sự kiện?DWORD dwTimeout, //[IN] Thời gian chờ tối đa (ms)BOOL fAlertable//[IN] Thiết lập là FALSE• SốbộbắtsựkiệnWSA_MAXIMUM_WAIT_EVENTS(=64)• Giá trị trả về:tốiđa:• Thất bại: WSA_WAIT_FAILED• Time-out: WSA_WAIT_TIMEOUT• Thành công: Chỉ số bộ bắt sự kiện nhỏ nhất đã chuyển trạng thái +WSA_WAIT_EVENT_07Hàm WSAEnumNetworkEvents()• Xác định các sự kiện xảy ra trên socketint WSAEnumNetworkEvents(SOCKET s,WSAEVENT hEventObject,//[IN] Socket muốn thăm dò//[IN] Bộ bắt sự kiện gắn với// socketLPWSANETWORKEVENTS lpNetworkEvents //[OUT] Cấu trúc chứa//mã sự kiện);• Cấu trúc WSANETWORKEVENTStypedef struct _WSANETWORKEVENTS{long lNetworkEvents; //Mặt nạ xác định sự kiện xảy raint iErrorCode[FD_MAX_EVENTS]; //Mảng các mã lỗi} WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;• Chỉ số kiểm tra mã lỗi có dạng FD_XXX_BIT• Nếu iErrorCode[FD_XXX_BIT] != 0 có lỗi xảy ra với sự kiệnFD_XXX84Sử dụng kỹ thuật vào ra theo sự kiện• socks[]: Mảng chứa giá trị các socket• events[]: Mảng các bộ nghe sự kiện gắn với socket• Bộ nghe events[i] gắn với socket socks[i]9Sử dụng WSAEventSelect()DWORD nEvents = 0;DWORD i, index;SOCKET socks[WSA_MAXIMUM_WAIT_EVENTS];WSAEVENT events [WSA_MAXIMUM_WAIT_EVENTS], newEvent;WSANETWORKEVENTS sockEvent;//Construct listenning socketSOCKET listenSock;listenSock = socket(...);//create new eventsnewEvent = WSACreateEvent();// Associate event types FD_ACCEPT and FD_CLOSE// with the listening socket and newEventWSAEventSelect(listenSock, NewEvent, FD_ACCEPT | FD_CLOSE);socks[0] = listenSock;events[0] = newEvent;nEvents ++;// Call bind(), listen()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 Các chế độ vào ra trên WinSock Kỹ thuật vào ra theo sự kiện Kỹ thuật OverlappedTài liệu liên quan:
-
Giáo án Tin học lớp 9 (Trọn bộ cả năm)
149 trang 279 0 0 -
Ngân hàng câu hỏi trắc nghiệm môn mạng máy tính
99 trang 257 1 0 -
Giáo trình Hệ thống mạng máy tính CCNA (Tập 4): Phần 2
102 trang 257 0 0 -
47 trang 242 3 0
-
Đề cương chi tiết học phần Thiết kế và cài đặt mạng
3 trang 240 0 0 -
80 trang 229 0 0
-
Giáo trình Hệ thống mạng máy tính CCNA (Tập 4): Phần 1
122 trang 218 0 0 -
122 trang 217 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 214 0 0 -
Giáo trình căn bản về mạng máy tính -Lê Đình Danh 2
23 trang 204 0 0