MFC – 互联网编程
MFC – 互联网编程
Microsoft 提供了许多用于对客户端和服务器应用程序进行编程的 API。正在为 Internet 编写许多新应用程序,随着技术、浏览器功能和安全选项的变化,将编写新类型的应用程序。您的自定义应用程序可以在 Internet 上检索信息并提供数据。
MFC 提供了一个CSocket类,用于使用 Windows Sockets 编写网络通信程序。
这是 CSocket 类中的方法列表。
| Sr.No. | 名称和描述 |
|---|---|
| 1 |
Attach 将 SOCKET 句柄附加到 CSocket 对象。 |
| 2 |
CancelBlockingCall 取消当前正在进行的阻塞呼叫。 |
| 3 |
Create 创建一个套接字。 |
| 4 |
FromHandle 返回一个指向 CSocket 对象的指针,给定一个 SOCKET 句柄。 |
| 5 |
IsBlocking 确定是否正在进行阻塞调用。 |
让我们通过创建 MFS SDI 应用程序来查看一个简单的示例。

步骤 1 – 在名称字段中输入 MFCServer,然后单击确定。

步骤 2 – 在高级功能选项卡上,检查 Windows 套接字选项。
第 3 步– 创建项目后,添加一个新的 MFC 类 CServerSocket。

步骤 4 – 选择 CSocket 作为基类,然后单击完成。
第 5 步– 添加更多 MFC 类 CReceivingSocket。

第 6 步– CRecevingSocket 将接收来自客户端的传入消息。
在 CMFCServerApp 中,头文件包括以下文件 –
#include "ServerSocket.h" #include "MFCServerView.h"
步骤 7 – 在 CMFCServerApp 类中添加以下两个类变量。
CServerSocket m_serverSocket; CMFCServerView m_pServerView;
步骤 8 – 在 CMFCServerApp::InitInstance() 方法中,创建套接字并指定端口,然后调用 Listen 方法,如下所示。
m_serverSocket.Create(6666); m_serverSocket.Listen();
步骤 9 – 在 CMFCServerView 头文件中包含以下头文件。
#include "MFCServerDoc.h"
步骤 10 – 覆盖 Socket 类中的 OnAccept 函数。

步骤 11 – 在类视图中选择 CServerSocket,在属性窗口中选择突出显示的图标。现在,添加 OnAccept。这是 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);
}
步骤 12 – 添加 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);
}
步骤 13 – 在 CReceivingSocket 类中添加 OnReceive() 函数。
右键单击解决方案资源管理器中的 CMFCServerView 类,然后选择添加 → AddFunction。

步骤 14 – 输入上述信息并单击完成。
步骤 15 – 在 CMFCServerView 头文件中添加以下 CStringArray 变量。
CStringArray m_msgArray;
步骤 16 – 这是 AddMsg() 函数的实现。
void CMFCServerView::AddMsg(CString message) {
m_msgArray.Add(message);
Invalidate();
}
步骤 17 – 更新构造函数,如下面的代码所示。
CMFCServerView::CMFCServerView() {
((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}
步骤 18 – 这是 OnDraw() 函数的实现,它显示消息。
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
}
步骤 19 – 服务器端现已完成。它将接收来自客户端的消息。
创建客户端应用程序
步骤 1 – 让我们为客户端应用程序创建一个新的基于 MFC 对话框的应用程序。


步骤 2 – 在高级功能选项卡上,检查 Windows 套接字选项,如上所示。
步骤 3 – 创建项目后,设计对话框,如下面的快照所示。

步骤 4 – 为连接和发送按钮添加事件处理程序。
步骤 5 – 为所有三个编辑控件添加值变量。对于端口编辑控制,选择变量类型 UINT。

步骤 6 – 添加用于连接和发送消息的 MFC 类。

步骤 7 – 在头文件 CMFCClientDemoApp 类中包含 CClientSocket 类的头文件并添加类变量。同样,在 CMFCClientDemoDlg 头文件中也添加类变量。
CClientSocket m_clientSocket;
步骤 8 – 这是连接按钮事件处理程序的实现。
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();
}
步骤 9 – 这是发送按钮事件处理程序的实现。
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");
}
}
步骤 10 – 首先运行服务器应用程序,然后运行客户端应用程序。输入本地主机 ip 和端口,然后单击连接。

步骤 11 – 您现在将在服务器端看到消息,如下面的快照所示。