# 基于 MFC 创建的聊天软件
软件基于 VS2019 中 MFC 模板进行创建
服务端和客户端的端口和 IP 地址都由初始化设定。采用 `TCP` 连接。在初始化函数中设定
服务端:Server 端设置基础的 IP 地址及端口,用来连接 Client 客户端。
服务端需要创建两个 Socket 函数用来通信。因为其中的一个 Socket 函数只能用来接收客户端发送的信息请求,但是却不会应答这个发送的信息请求。需要重新创建一个 Socket 去应答这个请求。因为需要服务端接收端都能接收发送消息,所以需要重写接收和发送函数用来满足特定的发送接收请求。
不论是接收函数还是发送函数都需要在发送信息的时候将丛控件内的信息进行编码转换,并按一定格式发送。
服务端发送消息函数 CMFCChatServerDlg::OnBnClickedStartBtn():首先使用 `GetDlgItem` 获取文本框中的内容保存到创建好的 strTmpMsg 中。使用宏定义将消息格式转化为 char 类型指针保存到新创建的变量中发送给客户端。发送客户端后需要设定格式并将自己发送的信息显示到对话框中。发送信息后需要调用 GetDlgItem 来将发送框中的内容进行清空。完成消息发送。
客户端:Client 端设置初始端口,用来连接 Server 端
客户端同样需要创建单独的 Socket 通信来接受或发送 Server 端的信息。
通用函数:获取当前时间函数,如果在发送消息的过程中加上发送消息的时间,那么需要获取系统当前时间。
如果发送消息需要标准化格式,包括 `时间` + `信息` + `消息`。给两个发送函数的 cpp 文件中都添加上一个发送消息标准化的函数
## 简易版本网络通信
##### C++ 实现 Socket 编程---异步非阻塞 Socket 封装类 CSsyncSocket
```
使用MSDN去查看类:https://msdn.microsoft.com/zh-cn/?query=
```
1、CAsyncSocket::Create(),使用#include<afxsock.h> 头文件,用 AfxSocketInit()初始化。
2、`异步非阻塞` ???
3、重写一个类,客户端和服务端
4、收到 Socket 事间之后,只是简单地回调 CAsyncSocket::OnReceive()等虚函数,所以 CAsuncSocket 的派生类,只需要在这些虚函数里添加发送和接收代码
5、客户方在使用 CAsyncSocket::Connect()时,往往返回一个 WSAEWOULDBLOCK 的错误(其他函数调用也是如此)。 实际上这不应该算作一个错误,它是 Socket 提醒我们,由于你使用了非阻塞 Socket 方式,所以(连接)操作需要时间,不能瞬间建立。
6 、事实上,我们可以在 Connect()调用之后等待 CAsyncSocket::OnConnect()事件被触发,CAsyncSocket::OnConnect()是要表明 Socket 要么连接成功了,要么连接彻底失败了。至此,我们在 CAsyncSocket::OnConnect()被调用之后就知道是否 Socket 连接成功了,还是失败了
7 、特别注意:难点,那就是在客户方调用 Connect()连接服务方,那么服务方如何 Accept(),以建立连接的问题。简单的做法就是在监听的 Socket 收到 OnAccept()时,用一个新的 CAsyncSocket 对象去建立连接
## 建立连接与收发消息:
1、从控件中获取 IP 地址及端口,调用 GetDlgItem()->GetWindowTextW 函数。使用 USES_CONVERSION 宏来转换 CString 为 char*
> USES_CONVERSION 是 ALT 中的一个宏定义用于编码转换。要想使用这个宏需要加上头文件#include<atlcon.h> USES_CONVERSION 从堆栈上分配内存,直到调用它的函数返回。该内存不会被释放,如果在一个循环中这个宏被反复调用会导致 stackoverflow.
`客户端` 需要重写 Socket 类,在控件连接按钮的操作函数上生成一个新的 CMySocket 对象创建套接字调用 Connect 去连接。连接成功会调用 Connect 函数后会回调 OnConnect 函数。在界面上显示信息。发送函数会通过 Send 函数发送给服务端然后将自身发送的信息显示到列表框(MFCClientDlg.cpp 中实现)。接收函数主要是会通过创建的 CMySocket 调用回调函数 OnReceive,通过格式转换将接收到的信息显示到客户端。
`服务端` 需要重写 2 个类:因为服务端有两类 Socket,一类是服务器 serversocket,一类是每来一个连接的 socket。在 server 端启动按钮处理函数中创建服务器 Socket 对象创建套接字。进行连接。进行连接之后创建新的 Socket 对象与服务器进行通信。调用 Accept 开始接收连接。发送消息控件处理函数与客户端类似。
## 自动回复
在客户端重写的 Socket 类中重写了 OnReceive 函数负责接收服务端发来的信息产生回调。如果自动回复控件被勾选那么出发自动恢复处理程序。通过调用客户端 Send 函数向服务端发送编辑框内自动回复信息(CMySocket.cpp 中实现)
## 颜色更改及保存配置信息
在客户端和服务端中存在颜色设置选项,那么需要使用 GetWindowTextW 拿到控件的颜色选择。调用 SetTextColor()函数改变字体颜色。保存配置信息需要在初始化中添加处理配置文件函数,如果处理没有配置文件就设置名称为默认名称。如果配置文件存在那么就设置控件中内容为获取的内容。保存昵称控件作用为修改昵称。首先需要保证控件中内容不为空。如果确认那么就将配置信息写入配置文件。
## 断开连接
断开连接首先就是把 m_client、m_server、m_chat 资源回收。将资源重新置为 NULL。然后显示到列表框中。三者实际上就是通信中调用的中间支持者。
## 快捷打开以及快捷键使用
使用 ShellExecute 可以支持快捷打开 exe 文件
快捷键使用主要是对按键按下时的处理。
示例代码:
```cpp
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
return TRUE;
}
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_SPACE)
{
return TRUE;
}
//添加快捷键 ctrl + x 退出对话框
if (pMsg->message == WM_KEYDOWN)
{
if (GetKeyState(VK_CONTROL) < 0) //ctrl键是否按下
{
if (pMsg->wParam == 'X')
{
CDialog::OnOK(); //退出
}}}
```
## 总结
客户端与服务端的通信最重要的是回调函数接发信息。主要的实现除了初始化的基本流程之外主要是对 C++ 中面向对象性质的理解。例如不论是接收信息还是发送信息都需要创建的对象去调用函数才能完成。例如在 Server 端用一个 m_server 接收一个连接请求就会重新创建一个 Socket 对象 m_chat 去进行接发消息。而 m_server 只是用来接收信息。在客户端中不论是收发消息还是创建连接都会用 m_client 对象去调用函数。
不足:其实对于 MFC 中控件的使用还是不太熟悉。在视频和帮助文档的帮助下才能完成。需要通过 MFC 的学习了解通信的基本流程,熟悉开发的流程。
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++(MFC)创建的聊天软件【100010151】
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共42个文件
h:15个
cpp:9个
bmp:3个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 151 浏览量
2022-12-16
15:01:34
上传
评论
收藏 283KB RAR 举报
温馨提示
服务端和客户端的端口和 IP 地址都由初始化设定。采用 TCP 连接。在初始化函数中设定 服务端:Server 端设置基础的 IP 地址及端口,用来连接 Client 客户端。
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/BMP.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/BMP.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/BMP.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 42 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/fbed2db386fd4018b8f2474d6651545d_s1t16.jpg!1)
神仙别闹
- 粉丝: 2714
- 资源: 7669
![benefits](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-1.c8e153b4.png)
下载权益
![privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-2.ec46750a.png)
C知道特权
![article](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-3.fc5e5fb6.png)
VIP文章
![course-privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-4.320a6894.png)
课程特权
![rights](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-icon.fe0226a8.png)
开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)