Microsoft提供了许多用于对客户端和服务器应用程序进行编程的API,正在为互联网编写许多新应用程序,并且随着技术,浏览器功能和安全选项的变化,将编写新类型的应用程序。
MFC提供了一个 CSocket 类,用于使用Windows Sockets编写网络通信程序。
这是CSocket类中方法的列表。
Sr.No. | Name & 描述 |
---|---|
1 |
Attach 将SOCKET句柄附加到CSocket对象。 |
2 |
CancelBlockingCall 取消当前正在进行的阻止呼叫。 |
3 |
Create 创建一个Socket。 |
4 |
FromHandle 给定SOCKET句柄,返回指向CSocket对象的指针。 |
5 |
IsBlocking 确定是否正在进行阻止呼叫。 |
让无涯教程通过创建MFS SDI应用程序来研究一个简单的示例。
步骤1 -在名称字段中输入MFCServer,然后单击"OK"。
步骤2 - 在"Advanced Features"标签上,选中" WindowsSocket"选项。
步骤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()方法中,创建Socket并指定端口,然后如下所示调用Listen方法。
m_serverSocket.Create(6666); m_serverSocket.Listen();
步骤9 - 在CMFCServerView头文件中包含以下头文件。
#include "MFCServerDoc.h"
步骤10 - 从Socket类覆盖OnAccept函数。
步骤11 - 在类视图中选择CServerSocket,然后在"Properties"窗口中选择突出显示的图标,现在,添加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()函数。
在Solution Explorer中右键单击CMFCServerView类,然后选择添加→AddFunction。
步骤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对话框的应用程序。
步骤2 - 在"Advanced Features"标签上,检查WindowsSocketoptions,如上所示。
步骤3 - 创建项目后,设计对话框,如以下快照所示。
步骤4 - 为"Connect"和"Send"按钮添加事件处理程序。
步骤5 - 为所有三个编辑控件添加值变量。对于端口编辑控制,选择变量类型UINT。
步骤6 - 添加用于连接和发送消息的MFC类。
步骤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"。
步骤11 - 现在,您将在服务器端看到该消息,如以下快照所示。