• 基于C++的即时通信软件设计


    目录
    — 、 概 述 1
    1 . 1 设 计 目 的 : 1
    1 . 2 设 计 内 容 : 1
    1 . 2 . 1 功 能 设 计 : 1
    1 . 2 . 2 界 面 设 计 : 1
    1 . 2 . 3 客 户 端 、 服 务 器 设 计 : 1
    1 . 3 设 计 要 求 : 1
    二 、 设 计 任 务 分 析 1
    2 . 1 功 能 设 计 分 析 : 1
    2 . 2 界 面 设 计 : 1
    2. 3 客 户 端 、 服 务 器 设 计 : 1
    2 . 3 . 1 客 户 端 设 计 : 1
    2 . 3 . 2 服 务 器 端 设 计 : 1
    三 、 总 体 设 计 2
    3. 1 界 面 设 计 结 果 2
    3 . 1 . 1 登 陆 、 注 册 对 话 框 2
    3 . 1 . 2 主 界 面 对 话 框 2
    3 . 2 客 户 端 程 序 处 理 流 程 图 : 3
    3. 3 服 务 器 端 程 序 处 理 流 程 图 4
    四 、 程 序 实 现 5
    4. 1 消 息 结 构 体 : 5
    4 . 1 . 1 消 息 结 构 体 5
    4 . 1 . 2 消 息 模 板 : 5
    4 . 1 . 3 解 释 : 5
    4 . 2 客 户 端 程 序 实 现 : 5
    4 . 2 . 1 客 户 端 自 定 义 套 接 字 类 ( 继 承 M F C 抽 象 类 C S O C K E T ) 实 现 : 5
    4 . 2 . 2 登 陆 、 注 册 对 话 框 实 现 : 6
    4 . 2 . 3 主 对 话 框 实 现 : 7
    4 . 3 服 务 器 程 序 实 现 : 10
    五 、 运 行 结 果 : 15
    5 . 1 登 陆 、 注 册 : 15
    5 . 2 消 息 发 送 : 17
    5 . 2 . 1 单 发 消 息 : 17
    5 . 2 . 2 群 发 消 息 : 18
    5 . 3 文 件 发 送 : 19
    六 、 心 得 与 体 会 20
    6 . 1 遇 到 的 问 题 及 解 决 方 案 20
    6 . 1 . 1 服 务 器 如 何 与 多 个 客 户 端 进 行 交 互 ? 20
    6 . 1 . 2 : 如 何 实 现 客 户 端 消 息 的 非 阻 塞 式 接 收 ? 20
    6 . 2 心 得 与 体 会 : 21
    参 考 文 献 : 21
    — 、概述
    1… 1 设 计 目 的 :
    设计一个基于 LAN 的即时通信软件,实现在局域网下可靠的、稳定的即时通信功能以及其从属的附加功能。 1 . 2 设 计 内 容 :
    1… 2 . 1 功 能 设 计 :
    ·实现一对一的单播通信,包括消息发送与接收以及文件的发送与接收;
    ·实现一对多的多播通信,包括消息的发送与接收;
    ·附加功能:实现登陆、注册、获取当前在线情况等功能;
    1 . 2 . 2 界 面 设 计 :
    ·客户端的交互界面设计。
    1 . 2 . 3 客 户 端 、 服 务 器 设 计 :
    ·客户端需要完成的功能;
    ·服务器需要完成的功能;
    ·客户端、服务器的交互设计;
    1… 3 设 计 要 求 :
    结合《计算机网络》课程所学的知识以及查阅相应的资料完成相应的设计内容, 且需要保证设计的质量以及程序的可靠性和稳定性。
    二、设计任务分析
    2… 1 功 能 设 计 分 析 :
    ·实现一对一的单播、多播通信:
    主要运用消息转发技术,需要服务器来处理消息的解析和转发;其中消息的解析包括获取消息的发送者、接收者、类别;本文转载自http://www.biyezuopin.vip/onews.asp?id=15303针对不同的解析结果需要做出不同的响应。
    ·实现附加功能:
    实现登陆、注册、获取当前在线情况等功能;将客户端对附加功能的调用当作特殊的请求消息发送给服务器,服务器解析后做出不同的响应。 2 . 2 界 面 设 计 :
    客户端界面需要有较好的交互性,因此需要设计:
    ·登陆、注册对话框:包括用户名输入框、登陆和注册按钮;
    ·主界面对话框:包括消息发送编辑框、消息接收显示区、好友在线情况显示区、发送按钮、以及登陆按钮; 2 . 3 客 户 端 、 服 务 器 设 计 :
    2 . 3 . 1 客 户 端 设 计 :
    ·获取客户所发送的消息内容;
    ·根据客户要求封装消息并发送消息;
    ·接收服务器发来的消息;
    ·解析接收的消息并执行对应响应的功能;
    2… 3 . 2 服 务 器 端 设 计 :
    ·获取客户端发来的消息
    ·解析消息并执行对应的处理
    ·将处理结果封装成消息发送给指定客户

    // MySocket.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "LanMessage.h"
    #include "MySocket.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /
    // CMySocket
    
    CMySocket::CMySocket()
    {
    }
    
    CMySocket::~CMySocket()
    {
    }
    void CMySocket::OnReceive(int n)//消息响应处理
    {
    	if(dlg->online)//在线才进行响应
    	{
        mes trans;
    	if(!Receive((void*)&trans,sizeof(trans))){return;}//获取服务器消息
    	CString txt1=trans.from,txt2="在线用户";
    	if(txt1==txt2)//如果是"在线客户"消息
    	{
    	CString show;
    	show.Format("当前用户:%s\r\n%s:%s",dlg->me,trans.from,trans.content);
    	dlg->m_online=show;
        dlg->UpdateData(false);//刷新主界面
    	}
    	else if(trans.from[0]=='_')//如果是文件消息
    	{
    		CStdioFile put;
    		CString name=trans.from;
    		name=name.Mid(1);//获取文件名
    		if(!put.Open(name,CFile::modeCreate|CFile::modeWrite))//将文件内容存储
    		{	AfxMessageBox("创建文件失败!");return;}
    		else put.WriteString(trans.content);
    		put.Close();
    	}
    	else {//如果是普通消息
    	CString show;
    	show.Format("From %s:%s\r\n",trans.from,trans.content);
    	dlg->m_show+=show;
        dlg->UpdateData(false);//刷新主界面
    	}
    	}
    }
    // Do not edit the following lines, which are needed by ClassWizard.
    #if 0
    BEGIN_MESSAGE_MAP(CMySocket, CSocket)
    	//{{AFX_MSG_MAP(CMySocket)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    #endif	// 0
    
    /
    // CMySocket member functions
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    需求拆分-软件工程
    LNMP网站架构部署
    Java 快速开发几 MB 独立 EXE,写图形界面很方便
    【博士每天一篇文献-算法】Gradient Episodic Memory for Continual Learning
    我不想 MySQL 分片
    发现流程任务的提交时间不对,@JsonFormat时间格式及时区问题
    分布式项目搭建
    【日常计算机问题】win11、win10解决公共WiFi认证不弹出的问题。电脑没有弹出认证界面。以广州图书馆i-guangdong;i广东为例
    稀疏奖励问题解决方案总览
    # Monaco Editor 使用
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/126702540