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

  • Post author:
  • Post category:其他




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



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. 服务器处理发过来的用户名、存储文件都是用的服务器类、还有一个存储在线人的信息类、服务器用容器存储在线人信息
vxid:y2638092197


只要实现了客户端与服务器的通信,就可以实现各种操作。做的这个没有很优化,还可以添加很多功能,代码也可以做很多优化
在这里插入图片描述



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

在这里插入图片描述

在这里插入图片描述


源码


[

如果哪一天我收费了,那是我真的需要钱了,而不是我想赚钱了

]



版权声明:本文为qq_40127080原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。