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应用程序来看一个简单的例子.

MFCServer

第1步 : 在名称字段中输入MFCServer,然后单击"确定".

MFCServer

第2步 : 在"高级功能"选项卡上,选中"Windows套接字"选项.

步骤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()方法中,创建套接字并指定端口,然后调用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类,然后选择Add →  AddFunction.

MFCServer

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

Client Side


客户端

第2步&减号;在高级功能选项卡上,检查Windows套接字选项,如上所示.

步骤3 : 创建项目后,设计对话框,如下图所示.

客户端

第4步 : 为连接和发送按钮添加事件处理程序.

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

Client Side

第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 : 您现在将在服务器端看到如下快照所示的消息.

客户端