MFC – 互联网编程
Microsoft提供了许多用于编程客户端和服务器应用程序的API.许多新应用程序正在为Internet编写,随着技术,浏览器功能和安全选项的变化,将编写新类型的应用程序.您的自定义应用程序可以检索信息并在Internet上提供数据.
MFC提供了一个类 CSocket ,用于使用Windows套接字编写网络通信程序.
这是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作为基类,然后单击Finish.
步骤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类,然后选择Add → 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步 : 这是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();
}
第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步 : 首先运行Server应用程序,然后运行客户端应用程序.输入本地主机IP和端口,然后单击连接.

步骤11 : 您现在将在服务器端看到如下快照所示的消息.
