• Hai lớp này không thread-safe: đối tượng tạo ra ở luồng nào thì chỉ có thể được sử dụng ở luồng đó.. Mã lỗi có thể truy nhập qua hàm GetLastError()[r]
(1)(2)• 4.1 Giới thiệu • 4.2 CSocket
• 4.3 CAsyncSocket
(3)• MFC: Microsoft Foundation Classes
• Bộ thư viện hướng đối tượng C++ lập trình ứng dụng Window
• Cung cấp hai lớp hỗ trợ lập trình mạng
– CAsyncSocket: Đóng gói lại thư viện WinSock dạng hướng đối tượng Hoạt động chế độ bất đồng
– CSocket: Kế thừa từ CAsyncSocket cung cấp giao diện mức cao Hoạt động chế độ đồng
• Hai lớp không thread-safe: đối tượng tạo luồng nào sử dụng luồng
• Tệp tiêu đề: afxsock.h
Chương 4.1 Giới thiệu
(4)• Khởi tạo thư viện: tự động framework qua hàm AfxSocketInit • Khởi tạo đối tượng CSocket: Phương thức Create
Chương 4.2 CSocket
BOOL Create(
UINT nSocketPort = 0, // Cổng, mặc định
int nSocketType = SOCK_STREAM, // Kiểu socket
LPCTSTR lpszSocketAddress = NULL) // Địa giao diện mạng, thí dụ // “192.168.1.1”
Giá trị trả về:
- Khác NULL thành công
- NULL thất bại Mã lỗi truy nhập qua hàm GetLastError() Thí dụ:
(5)• Kết nối đến máy khác: Phương thức Connect
Chương 4.2 CSocket
144
BOOL Connect(
LPCTSTR lpszHostAddress, // Địa chỉ/tên miền máy đích
UINT nHostPort // Cổng
);
BOOL Connect(
const SOCKADDR* lpSockAddr, // Địa máy đích dạng SOCKADDR
int nSockAddrLen // Chiều dài cấu trúc địa
);
Giá trị trả về:
- Khác NULL thành công
- NULL thất bại Mã lỗi truy nhập qua hàm GetLastError() Thí dụ:
CSocket s; s.Create();
(6)• Đợi kết nối từ máy khác: Phương thức Listen
Chương 4.2 CSocket
BOOL Listen(
int nConnectionBacklog =5)
Giá trị trả về:
- Khác NULL thành công
- NULL thất bại Mã lỗi truy nhập qua hàm GetLastError()
(7)• Chấp nhận kết nối từ máy khác: Phương thức Accept
Chương 4.2 CSocket
146
virtual BOOL Accept(
CSocket& rConnectedSocket, // Socket tương ứng với kết nối
SOCKADDR* lpSockAddr = NULL,// Địa socket dạng SOCKADDR
int* lpSockAddrLen = NULL // Chiều dài địa
);
Giá trị trả về:
- Khác NULL thành công
- NULL thất bại Mã lỗi truy nhập qua hàm GetLastError() Thí dụ:
CSocket Server, Client;
// Khởi tạo socket Server …
// Chấp nhận kết nối
Server.Accept(Client);
// Gửi nhận liệu Client