1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình mạng: Chương 4 - Lê Bá Vui

74 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 74
Dung lượng 619,47 KB

Nội dung

Bài giảng Lập trình mạng: Chương 4 Các phương pháp vào ra trong lập trình socket, cung cấp cho người học những kiến thức như: Các chế độ hoạt động của Winsock; Phương pháp vào ra sử dụng lập trình đa luồng; Phương pháp vào ra sử dụng hàm select; Phương pháp vào ra sử dụng hàm AsyncSelect; Phương pháp vào ra sử dụng hàm EventSelect; Phương pháp vào ra sử dụng cơ chế Overlapped; Phương pháp vào ra sử dụng cơ chế Overlapped – Completion Port. Mời các bạn cùng tham khảo!

Chương Các phương pháp vào lập trình socket Chương Các phương pháp vào 4.1 Các chế độ hoạt động Winsock 4.2 Phương pháp vào sử dụng lập trình đa luồng 4.3 Phương pháp vào sử dụng hàm select 4.4 Phương pháp vào sử dụng hàm AsyncSelect 4.5 Phương pháp vào sử dụng hàm EventSelect 4.6 Phương pháp vào sử dụng chế Overlapped 4.7 Phương pháp vào sử dụng chế Overlapped – Completion Port 134 4.1 Các chế độ hoạt động Winsock • Blocking (Đồng bộ): – Là chế độ mà hàm vào chặn thread đến thao tác vào hoàn tất (các hàm vào không trở thao tác hoàn tất) – Là chế độ mặc định SOCKET – Các hàm ảnh hưởng: • accept • connect • send • recv • 135 4.1 Các chế độ hoạt động Winsock • Blocking (Đồng bộ): Application OS I/O Request Blocking state Perform I/O I/O Complete 136 4.1 Các chế độ hoạt động Winsock • Blocking (Đồng bộ): – Thích hợp với ứng dụng xử lý Không nên gọi hàm blocking thread xử lý giao diện (GUI Thread) – Ví dụ: Thread bị chặn hàm recv gửi liệu { // Thread bị chặn lại gọi hàm recvfrom // Trong lúc đợi liệu khơng thể gửi liệu rc = recvfrom(receiver, szXau, 128, 0, (sockaddr*)&senderAddress, &senderLen); // } while () 137 4.1 Các chế độ hoạt động Winsock • Non-Blocking (Bất đồng bộ): – Là chế độ mà thao tác vào trở nơi gọi tiếp tục thực thi thread Kết thao tác vào thơng báo cho chương trình chế đồng – Các hàm vào bất đồng trả mã lỗi WSAWOULDBLOCK thao tác khơng thể hồn tất thời gian đáng kể (chấp nhận kết nối, nhận liệu, gửi liệu ) Đây điều hồn tồn bình thường – Có thể sử dụng thread xử lý giao diện ứng dụng – Thích hợp với ứng dụng hướng kiện 138 4.1 Các chế độ hoạt động Winsock • Non-Blocking (Bất đồng bộ): Application OS I/O Request Non-Blocking state Other Computations Perform I/O I/O Complete 139 4.1 Các chế độ hoạt động Winsock • Non-Blocking (Bất đồng bộ): – Socket cần chuyển sang chế độ hàm ioctlsocket SOCKET s; unsigned long ul = 1; int nRet; s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Chuyển sang chế độ non-blocking nRet = ioctlsocket(s, FIONBIO, (unsigned long*)&ul); if (nRet == SOCKET_ERROR) { // Thất bại } 140 4.2 Vào sử dụng lập trình đa luồng - Mơ hình mặc định, đơn giản Khơng thể gửi nhận liệu đồng thời luồng Chỉ nên áp dụng ứng dụng đơn giản, xử lý tuần tự, kết nối Giải vấn đề xử lý song song việc tạo thêm thread chuyên biệt: thread gửi liệu, thread nhận liệu - Hàm API CreateThread sử dụng để tạo luồng HANDLE WINAPI CreateThread( in LPSECURITY_ATTRIBUTES lpThreadAttributes, in SIZE_T dwStackSize, in LPTHREAD_START_ROUTINE lpStartAddress, in LPVOID lpParameter, in DWORD dwCreationFlags, out LPDWORD lpThreadId); - Hàm API TerminateThread sử dụng để xóa thread BOOL WINAPI TerminateThread( in_out HANDLE hThread, in DWORD dwExitCode ); 141 4.2 Vào sử dụng lập trình đa luồng • Ứng dụng server gửi nhận liệu đồng thời Main Thread socket Gửi nhận liệu đồng thời bind listen accept Receiver Thread CreateThread recv send other tasks other tasks 142 .. .Chương Các phương pháp vào 4. 1 Các chế độ hoạt động Winsock 4. 2 Phương pháp vào sử dụng lập trình đa luồng 4. 3 Phương pháp vào sử dụng hàm select 4. 4 Phương pháp vào sử dụng hàm AsyncSelect 4. 5... CreateThread recv send other tasks other tasks 142 4. 2 Vào sử dụng lập trình đa luồng - Đoạn chương trình sau minh họa việc gửi nhận liệu đồng thời TCP Client // Khai báo luồng xử lý việc nhận liệu DWORD... (strlen(gets(szXau)) >= 2) { rc = send(client, szXau, strlen(szXau), 0); } 143 4. 2 Vào sử dụng lập trình đa luồng - Đoạn chương trình (tiếp) DWORD WINAPI ReceiverThread(LPVOID lpParameter) { char szBuf[128];

Ngày đăng: 04/11/2022, 09:35