【vs2010基于MFC对话框】实现客户--服务器模式下网络程序的Shocket双向通信

【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);

到此,两端中的客户端已完成,再建立一个服务器端工程,即可实现两端通信连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值