目前完成度【 1/3 】,有任何建议欢迎反馈 【问卷调查】
contenteditable="true"

MFC - Internet Programming 介绍

Microsoft提供了许多用于对客户端和服务器应用程序进行编程的API。正在为Internet编写许多新应用程序,并且随着技术,浏览器功能和安全选项的变化,将编写新类型的应用程序。您的自定义应用程序可以检索信息并在Internet上提供数据。

MFC提供了一个 CSocket 类,用于使用Windows Sockets编写网络通信程序。

这是CSocket类中方法的列表。

Sr.No.Name & Description
1

Attach

将SOCKET句柄附加到CSocket对象。

2

CancelBlockingCall

取消当前正在进行的阻止呼叫。

3

Create

创建一个Socket。

4

FromHandle

给定SOCKET句柄,返回指向CSocket对象的指针。

5

IsBlocking

确定是否正在进行阻止呼叫。

让我们通过创建MFS SDI应用程序来研究一个简单的示例。

MFCServer

步骤1 -在名称字段中输入MFCServer,然后单击"OK"。

MFCServer

步骤2 -在"Advanced Features"标签上,选中" WindowsSocket"选项。

步骤3 -创建项目后,添加一个新的MFC类CServerSocket。

MFCServer

步骤4 -选择CSocket作为基类,然后单击Finish。

第5步-添加更多的MFC类CReceivingSocket。

MFCServer

步骤6 -CRecevingSocket将接收来自客户端的传入消息。

在CMFCServerApp中,头文件包括以下文件-

#include "ServerSocket.h"
#include "MFCServerView.h"

步骤7 -在CMFCServerApp类中添加以下两个类变量。

CServerSocket m_serverSocket;
CMFCServerView m_pServerView;

步骤8 -在CMFCServerApp::InitInstance()方法中,创建Socket并指定端口,然后如下所示调用Listen方法。

m_serverSocket.Create(6666);
m_serverSocket.Listen();

步骤9 -在CMFCServerView头文件中包含以下头文件。

#include "MFCServerDoc.h"

步骤10 -从Socket类覆盖OnAccept函数。

MFCServer

步骤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。

MFCServer

步骤14 -输入上述信息,然后单击"Finish"。

步骤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对话框的应用程序。

Client Side

Client Side

步骤2 -在"Advanced Features"标签上,检查WindowsSocketoptions,如上所示。

步骤3 -创建项目后,设计对话框,如以下快照所示。

Client Side

步骤4 -为"Connect"和"Send"按钮添加事件处理程序。

步骤5 -为所有三个编辑控件添加值变量。对于端口编辑控制,选择变量类型UINT。

Client Side

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

Client Side

步骤7 -将CClientSocket类的头文件包含在头文件CMFCClientDemoApp类中,并添加类变量。同样,在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 -这是"Send"按钮事件处理程序的实现。

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和端口,然后单击"Connect"。

Client Side

步骤11 -现在,您将在服务器端看到该消息,如以下快照所示。

Client Side