MFC 实现socket 套接字简单聊天室

前言 有不对的地方希望大家多多指正

socket实现网络聊天室,是一个服务器,多个客户端,主要就是发送与处理消息,文末是源码

MFC是实现图形化界面,但是MFC的消息机制,不允许在一个消息里面实现循环接受socket的消息,所以需要一个线程来接收。

写程序前要先确定好需求再去完成代码

需求 服务器 页面

  1. 显示在线人的名称、ip地址
  2. 显示在线人数
  3. 显示处理客户端发出的请求 消息

需求 用户 页面

  1. 注册页面:
    • 页面样式:输入用户名、两次密码确认、确认按钮、清空密码按钮
    • 完成功能:显示用户注册成功、是否重复注册
  2. 登陆页面:
    • 页面样式:输入用户名与密码,登陆按钮、注册按钮、清空按钮、输入服务器IP按钮【本来想在区域网内两台电脑测试一下,不是知道 输入服务器IP连接不上】
    • 完成功能:是否注册、密码是否正确、是否重复登陆、登陆成功后跳到聊天页面
  3. 聊天页面
    • 页面样式:好友列表,显示聊天信息框、输入消息框、发送消息按钮、清空聊天信息按钮、刷新好友列表按钮、显示在线人数、显示当前聊天人
    • 完成功能:接受消息与发送消息、显示好友与人数、显示消息记录

用到的组件

按钮 为 button按钮
Static Text: 显示提示文字
Edit Control编辑框:输入用户名、密码、显示处理消息、显示聊天记录
List Control 表单:显示列表在线人数列表、好友列表

需求 服务器与客户端 处理的内容

  1. 最基本的,一直接受客户端发过来的请求(在MFC创建线程)
  2. 用户的注册请求(【消息格式:R用户名#密码】)
  • 对客户端回复
    • 是否重复注册,并返回客户端 【消息格式:N】
    • 注册失败,服务器无法完成注册【消息格式:N】
    • 注册成功,给客户端发送请求【消息格式:Y】
  • 服务器处理消息
    • 是否重复注册,并向客户端返回
    • 将用户名与密码写入保存,并将结果返回给客户端
    • 显示注册信息
  1. 用户的登录请求(【消息格式:L用户名#密码#端口】)
  • 对客户端的回复
    • 未注册过 【消息格式:0 】
    • 密码错误 【消息格式:1 】
    • 重复登陆 【消息格式:2 】
    • 登陆成功 【消息格式:Y】
  • 服务器处理消息
    • 取出用户名检查是否注册,显示用户名未登陆
    • 核对用户名密码是否正确,显示用户名未注册
    • 是否已登陆,显示用户名重复登陆
    • 登陆成功,显示用户名登陆,显示在线人数与在线人数列表

4.用户的聊天功能实现

  • 客户端获取在线人数列表请求【消息格式:PL】
  • 服务器回复在线人数列表【消息格式:用户名#用户名…$】 最后一个符号位结束符
  • 客户端发过来的聊天请求【消息格式:PM发送人#接收人#聊天内容】
    • 接收人为非群聊 向客户端回复
      • 转发成功【消息格式:Y】
      • 好友未在线【消息格式:N】
    • 接收人为非群聊 服务器处理的消息
      • 判断是否在线
      • 转发消息,并显示发送人-》接收人:聊天内容
    • 接收人为群聊 向客户端回复
      • 转发成功【消息格式:Y】
      • 转发失败【消息格式:N】
    • 接收人为群聊 服务器处理的消息
      • 转发消息,并向客户端回复
      • 显示来群聊:聊天内容

4.用户退出请求 【消息格式:E用户名】

  • 服务器处理消息 根据用户名删除在线列表,删除窗口列表、更改显示认识、显示退出信息

补充

  1. 服务器有一个线程循环监视客户端发来的请求,客户端的聊天页面时一直循环接受服务器发过来消息
  2. 显示页面聊天用的自定义消息机制
  3. 服务器处理发过来的用户名、存储文件都是用的服务器类、还有一个存储在线人的信息类、服务器用容器存储在线人信息
只要实现了客户端与服务器的通信,就可以实现各种操作。做的这个没有很优化,还可以添加很多功能,代码也可以做很多优化MFC 实现socket 套接字简单聊天室_第1张图片

打开文件,运行文件可能不成功,需要改东西

MFC 实现socket 套接字简单聊天室_第2张图片
MFC 实现socket 套接字简单聊天室_第3张图片

源码链接:链接:https://pan.baidu.com/s/1y91Py_f1_2QdcdR87CnCQQ
提取码:b6ta

你可能感兴趣的:(MFC,socket套接字)