MFC - Lập trình Internet
Microsoft cung cấp nhiều API để lập trình cả ứng dụng máy khách và máy chủ. Nhiều ứng dụng mới đang được viết cho Internet, và khi công nghệ, khả năng của trình duyệt và các tùy chọn bảo mật thay đổi, các loại ứng dụng mới sẽ được viết. Ứng dụng tùy chỉnh của bạn có thể truy xuất thông tin và cung cấp dữ liệu trên Internet.
MFC cung cấp một lớp CSocket để viết các chương trình truyền thông mạng với Windows Sockets.
Đây là danh sách các phương thức trong lớp CSocket.
Sr.No. | Tên & Mô tả |
---|---|
1 | Attach Gắn một tay cầm SOCKET vào một đối tượng CSocket. |
2 | CancelBlockingCall Hủy cuộc gọi chặn hiện đang diễn ra. |
3 | Create Tạo một ổ cắm. |
4 | FromHandle Trả về một con trỏ đến một đối tượng CSocket, được cung cấp bởi một tay cầm SOCKET. |
5 | IsBlocking Xác định xem có đang thực hiện một cuộc gọi chặn hay không. |
Chúng ta hãy xem xét một ví dụ đơn giản bằng cách tạo một ứng dụng MFS SDI.
Step 1 - Nhập MFCServer vào trường tên và nhấp OK.
Step 2 - Trên tab Tính năng nâng cao, chọn tùy chọn ổ cắm Windows.
Step 3 - Sau khi dự án được tạo, hãy thêm một CServerSocket lớp MFC mới.
Step 4 - Chọn CSocket làm lớp cơ sở và nhấp vào Kết thúc.
Step 5 - Thêm thêm CReceivingSocket lớp MFC.
Step 6 - CRecevingSocket sẽ nhận tin nhắn đến từ máy khách.
Trong CMFCServerApp, tệp tiêu đề bao gồm các tệp sau:
#include "ServerSocket.h"
#include "MFCServerView.h"
Step 7 - Thêm hai biến lớp sau trong lớp CMFCServerApp.
CServerSocket m_serverSocket;
CMFCServerView m_pServerView;
Step 8 - Trong phương thức CMFCServerApp :: InitInstance (), tạo socket và chỉ định cổng sau đó gọi phương thức Listen như hình bên dưới.
m_serverSocket.Create(6666);
m_serverSocket.Listen();
Step 9 - Bao gồm tệp tiêu đề sau trong tệp tiêu đề CMFCServerView.
#include "MFCServerDoc.h"
Step 10 - Ghi đè chức năng OnAccept khỏi lớp Socket.
Step 11- Chọn CServerSocket trong chế độ xem lớp và biểu tượng được tô sáng trong cửa sổ Thuộc tính. Bây giờ, Thêm OnAccept. Đây là việc thực hiện chức năng OnAccept.
void CServerSocket::OnAccept(int nErrorCode) {
// TODO: Add your specialized code here and/or call the base class
AfxMessageBox(L"Connection accepted");
CSocket::OnAccept(nErrorCode);
}
Step 12 - Thêm hàm OnReceive ().
void CServerSocket::OnReceive(int nErrorCode) {
// TODO: Add your specialized code here and/or call the base class
AfxMessageBox(L"Data Received");
CSocket::OnReceive(nErrorCode);
}
Step 13 - Thêm hàm OnReceive () trong lớp CReceivingSocket.
Nhấp chuột phải vào lớp CMFCServerView trong trình khám phá giải pháp và chọn Thêm → AddFunction.
Step 14 - Nhập các thông tin đã đề cập ở trên và nhấn hoàn tất.
Step 15 - Thêm biến CStringArray sau trong tệp tiêu đề CMFCServerView.
CStringArray m_msgArray;
Step 16 - Đây là phần thực hiện của hàm AddMsg ().
void CMFCServerView::AddMsg(CString message) {
m_msgArray.Add(message);
Invalidate();
}
Step 17 - Cập nhật hàm tạo như được hiển thị trong đoạn mã sau.
CMFCServerView::CMFCServerView() {
((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}
Step 18 - Đây là phần thực hiện của hàm OnDraw () hiển thị thông báo.
void CMFCServerView::OnDraw(CDC* pDC) {
int y = 100;
for (int i = 0; m_msgArray.GetSize(); i++) {
pDC->TextOut(100, y, m_msgArray.GetAt(i));
y += 50;
}
CMFCServerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
Step 19- Hiện tại phía máy chủ đã hoàn tất. Nó sẽ nhận được tin nhắn từ khách hàng.
Tạo ứng dụng phía máy khách
Step 1 - Hãy để chúng tôi tạo một ứng dụng dựa trên hộp thoại MFC mới cho ứng dụng phía máy khách.
Step 2 - Trên tab Advanced Features, đánh dấu vào tùy chọn Windows sockets như hình trên.
Step 3 - Sau khi dự án được tạo, hãy thiết kế hộp thoại của bạn như thể hiện trong ảnh chụp nhanh sau.
Step 4 - Thêm trình xử lý sự kiện cho các nút Kết nối và Gửi.
Step 5- Thêm các biến giá trị cho cả ba điều khiển chỉnh sửa. Đối với điều khiển chỉnh sửa cổng, hãy chọn loại biến UINT.
Step 6 - Thêm lớp MFC để kết nối và gửi tin nhắn.
Step 7- Đưa tệp tiêu đề của lớp CClientSocket vào tệp tiêu đề của lớp CMFCClientDemoApp và thêm biến lớp. Tương tự, hãy thêm biến lớp trong tệp tiêu đề CMFCClientDemoDlg.
CClientSocket m_clientSocket;
Step 8 - Đây là phần triển khai của bộ xử lý sự kiện nút Connect.
void CMFCClientDemoDlg::OnBnClickedButtonConnect() {
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_clientSocket.Create();
if (m_clientSocket.Connect(m_ipAddress, m_port)) {
AfxMessageBox(L"Connection Successfull");
}else {
AfxMessageBox(L"Connection Failed");
}
DWORD error = GetLastError();
}
Step 9 - Đây là phần thực hiện của bộ xử lý sự kiện nút Gửi.
void CMFCClientDemoDlg::OnBnClickedButtonSend() {
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_clientSocket.Send(m_message.GetBuffer(m_message.GetLength()), m_message.GetLength())) {
}else {
AfxMessageBox(L"Failed to send message");
}
}
Step 10- Đầu tiên chạy ứng dụng Máy chủ và sau đó là ứng dụng máy khách. Nhập ip và cổng của máy chủ cục bộ và nhấp vào Kết nối.
Step 11 - Bây giờ bạn sẽ thấy thông báo ở phía Server như trong ảnh chụp sau.