【vs2010基于MFC对话框】实现客户–服务器模式下网络程序的Shocket双向通信
编译环境采用Visual Studio 2010,此工程为学校课堂练习,要求实现基于MFC对话框的两端通信。两端分别为客户端和服务器端。下面是实现客户端的工程过程:
1.建立工程
建立一个新的基于MFC对话框的项目,项目名称为ChatClient。然后在高级功能中勾上wIndows套接字项,点击完成创立工程,如图:
2.添加类
创建好工程后,首先要创建类名为CClientSocket的客户Socket对象,给工程添加MFC类,基类为CAsyncSocket,类名为CClientSocket:
点击类视图可以查看是否添加成功,出现CClientSocket类为成功。
3.添加头文件声明
要使客户端程序能够创建和控制本地的Socket,在客户端工程界面控制模块的头文件ChatClientDlg.h中添加如下两行代码:
#include "ClientSocket.h" //使主界面程序能够访问Socket类的代码文件
CClientSocket m_ClientSocket;//为了后面与服务器通信而定义的Socket成员变量
在Socket源文件ClientSocket.cpp中添加头文件声明:
#include "ChatClientDlg.h"
4.设计布局界面和关联变量
接下来是给客户端设计一个简洁的界面:
在界面上添加一个IP地址控件和列表框,文本框两个,四个按钮,同时修改好Caption。
下一步,为IP地址控件添加变量ServerIP,为上面的文本框控件添加value类别int型变量sPort,为下面的文本框控件添加value类别CString型变量sWords为列表框关联变量m_ListWords。(可点击类向导查看添加的变量)
5.添加客户端源码
接下来为工程添加灵魂,给每个按钮加入响应代码。
连接服务器按钮代码:
//连接服务器
BYTE nFild[4];
CString sIP;
UpdateData();
ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
sIP.Format("%d.%d.%d.%d",nFild[0],nFild[1],nFild[2],nFild[3]);
m_ClientSocket.Create(); //创建客户端Socket
m_ClientSocket.Connect(sIP,sPort); //发起连接请求
断开按钮代码:
//断开与服务器的连接
m_ClientSocket.Close(); //关闭客户端Socket
m_ListWords.AddString("从服务器断开");
发送消息按钮代码:
//向服务器发信息
UpdateData();
m_ClientSocket.Send(m_sWords,m_sWords.GetLength()); //发信息
m_ListWords.AddString("发送:" + m_sWords);
m_ListWords.SetTopIndex(m_ListWords.GetCount() - 1);
6.重写类函数
在类视图中选中CClientSocket,在属性窗口中单击“重写”按钮,就可以为该Socket类编写被动响应网络事件的函数
选择OnConnect()函数,为其添加代码,系统将该函数的代码自动置于ClientSocket.cpp文件中,OnConnect()代码如下:
//确认客户端是否成功连接到服务器
if(nErrorCode)
{
AfxMessageBox("连接失败,请您重试!");
return;
}
((CChatClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ListWords.AddString("连接服务器成功!");
((CChatClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ListWords.SetTopIndex(
((CChatClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ListWords.GetCount()- 1);
到此,两端中的客户端已完成,再建立一个服务器端工程,即可实现两端通信连接。