一. 概述

1.1. 背景

作为乐天工作室的一个开源程序,局域网内的即时通讯软件,命名NetMsg。

1.2. 功能描述

定位于局域网内的即时通信软件,借鉴飞鸽传书、QQ等即时通讯工具,提供以下功能:

Ø         程序启动后自动搜索局域网内所有启动NetMsg的用户,将用户添加到用户列表,可以与这些用户进行通讯;

Ø         用户可以设定自己的昵称、在线状态等相关信息;

Ø         实现局域网内用户与用户之间一对一、一对多的实时通讯,通讯内容主要是文本数据;

Ø         实现局域网内文件或目录的可靠传输;

Ø         对通讯内容或文件进行加密和校验的功能;

Ø         对通讯内容、传输文件有日志记录,便于以后查看;

Ø         程序界面方面:具备简洁明了的主窗口,任务栏显示图标快捷方式;主窗口大小可以调节,位置可以拖动,可以停靠到屏幕上部边缘;主窗口始终显示在桌面最上层;文本通讯窗口提供文本输入区域和文本显示区域;文本通讯窗口提供用户详细信息;文本通讯窗口提供文件传输功能菜单或功能按钮等;文本通讯窗口大小可以调节、位置可以移动;

1.3. 开发平台

Microsoft Windows Xp sp2操作系统;

C,C++语言;

VisualC++6.0作为开发工具,使用到了MFC的类库;

1.4. 运行环境

Microsoft Windows2000、WindowsXp,Windows2003操作系统。

二. 设计

2.1. 原理

局域网络内登录NetMsg的用户之间是对等的关系,用户之间直接进行数据交互而不需要通过中间服务器;

登录用户列表的建立,使用UDP协议发送广播数据包,已启动NetMsg的用户收到此广播包后,就会在自己的用户列表中添加此用户,同时向对方发送本机用户相关信息,从而使双方都能建立起用户列表;

传送聊天信息使用UDP协议,由于UDP协议是无连接协议,传输速度快,但是没有确认机制,是不可靠的协议,鉴于局域网网络状况相对稳定,基本能够保证数据包的正常到达目的地,不需添加自定义确认机制;

用户离线时同样发送一个广播数据包,其它用户收到此数据包后根据包中的信息删除此用户;

文件内容的传输采用TCP协议;

2.2 数据传输协议

数据传输协议定义了发送数据包的格式,通讯双方对数据包内容含义的理解。

数据包包括数据包包头和消息体,格式如下:

版本号:数据包编号:MAC地址:登录用户名:主机名:数据包生成时间:命令字:校验和:消息体

其中消息体前面的内容是数据包包头信息的定义,各选项含义如下:

序号

选项

含义

1

版本号

程序版本号。

2

数据包编号

发送数据包编号。(暂时不用)

3

MAC地址

主机网卡的地址,唯一标识一个用户。

4

登录用户名

登录操作系统启动当前程序的用户名。

5

主机名

主机名称。

6

数据包生成时间

数据包生成时间。

7

命令字

命令字,标识本数据包的含义,确定怎样解析消息体。

8

校验和

消息体内容的校验和。(暂时不用)

9

消息体

消息体内容。

其中最重要的一个选项是命令字,根据命令字的不同含义执行相关的操作,各命令字的含义如下:

命令字

含义

附加信息

MSG_NOOPERATION

不进行任何操作

MSG_BR_ENTRY

广播通报用户上线

用户信息

MSG_BR_EXIT

广播通报用户下线

MSG_ANSENTRY

对广播数据包的答复

用户信息

MSG_SENDDATA

发送消息命令字。

消息内容。

MSG_UPDATE_USERINFOR

更新用户信息命令字。

用户信息。

MSG_FILE_SEND

通知发送文件

文件信息(文件长度、名称等)

MSG_FILE_AGREERECV

同意接收文件

MSG_FILE_PREPARE

传输文件准备就绪

MSG_FILE_ERROR

传输文件失败

错误代号。代号格式:4XXXX

MSG_FILE_REFUSERECV

拒绝接收文件

MSG_FILE_BREAKSEND

中断发送文件

MSG_FILE_BREAKRECV

中断接收文件

2.3 数据结构定义

2.3.1数据包包头定义

Public class PacketHead{

CString  version ;            //版本号

DWORD dataId  ;              //数据包编号,暂时不用,只作为占为,赋值0

CString macAddr ;              //MAC地址,用于唯一的标识一个用户

CString loginUserName ;         //登录系统用户名

CString hostname ;              //主机名称

CString time ;                  //数据包发送时间,格式:2008-11-9 12:10:00

UINT  cmd;                  //命令字

CString checksum ;             //校验和,暂时不用,赋值:checksum

PacketHead();

~ PacketHead();

int GetPacketHead(CString &recvBuf ,int recvDataLength); //解析接收到的数据,分离出数据包包头的各项数据

CString GetPacketHeadData();    //得到数据包包头的字符串。

};

2.3.2 用户信息类

class CUserInfor

{

public:

int GetUserFromRecvbuf(CString &recvbuf);         //解析收到数据包得到用户信息

CString GetUserInforData();                      // 返回用户信息字符串

private:

CString strMACAddr ;

CString strNickname ;

CString strHostName ;

CString strHostIp ;

CString strUserName ;

CString strWorkGroup ;

UINT indexImage ;

};

2.3.3 传送文件类

2.4 文件传输过程

甲方向乙方发送MSG_FILE_SEND  甲命令字请求传送文件,

A: 如果乙方同意接收文件,向甲方发送MSG_FILE_AGREERECV命令字表示同意接收,甲方接受到MSG_FILE_AGREERECV命令字后启动一个新线程建立TCP监听套接字同时向乙方MSG_FILE_PREPARE命令字表示已经准备就绪 ,乙方可以连接接收文件, 乙方接受到MSG_FILE_PREPARE命令字后发送TCP连接请求,进行文件传输。 如果任何一个环节出来错误,则向对方发送MSG_FILE_ERROR命令字,双方做各自的清理工作,比如关闭线程、关闭套接字等。

B: 如果乙方拒绝接受文件则向甲方发送MSG_FILE_REFUSERECV命令字。

C:如果在文件传输过程当中任何甲方终止传输,则需要向乙方发送MSG_FILE_BREAKSEND命令字,如果乙方终止接收则需要向甲方发送MSG_FILE_BREAKRECV套接字。

下载地址:

http://download.csdn.net/source/2211897

局域网即时通讯软件的实现相关推荐

  1. 为什么企业选择局域网即时通讯软件?局域网即时通讯软件哪家好?

    在当今互联网普及的时代,企业内部的沟通对企业管理有着非常重要的意义,即时通讯软件已成为企业工作中广泛采用的沟通工具. 然而,随着企业内部敏感信息通过互联网泄露的频繁发生,例如在工作期间,企业员工自发地 ...

  2. 企业选择局域网即时通讯软件的必要性是什么?

    在互联网时代,很多企业不断进行数字化升级,想要摆脱沟通麻烦.流程复杂.资源利用率低的传统办公模式,推进线上办公或远程办公信息化建设,而这就离不开我们常说的"即时通讯软件"来进行连接 ...

  3. 局域网即时通讯软件可以保护数据安全吗?

    根据调查显示,出于安全考虑,现在很多企业已禁止使用个人即时通讯软件.因为个人通讯软件缺乏完善安全机制,容易出现内部资料泄漏问题.只有安全的通讯软件-局域网即时通讯软件才能提高企业工作效率,增强员工协同 ...

  4. 局域网即时通讯软件怎么部署

    如今,国家经济体系正逐渐完善中,科技领域也处于高速发展阶段,各企业都在加快内部工作节奏,以求获取更好的发展机会.以前企业内部通讯系统往往是电话.电子邮件等传统方式,这些方式往往需要等待很长时间才能得到 ...

  5. 局域网即时通讯软件_什么样的企业即时通讯软件好用?应该如何选择?

    企业即时通讯是目前最为流行的通讯方式,市场上的即时通讯软件层出不穷,种类繁多,我们一时也不知道怎么选择.为了方便企业更好的选择即时通讯软件,我对目前市面上的一些即时通讯软件进行了分类和总结,希望对大家 ...

  6. c语言即时通讯软件源码,即时通讯软件源码-基于c语言即时通讯软件代码实现

    我不知道哪种语言无关紧要.开源,我不知道该用什么. 即时通讯软件源代码为JAVA语言 对于即时通讯软件源代码最好是用C语言编写的,想学一下,感谢您即时通讯软件有什么. includewinscock2 ...

  7. 即时通讯软件开发界公认的说法

    目前即时通讯软件开发界公认的说法是目录级别在3级以内.飞鸽传书有时域名根目录下不一定只有目录,还有一些单页面,这样的单页面在局域网聊天中的权重肯定要比目录下的单页面高. 同时,在目录中设置内网通信是很 ...

  8. 即时通讯软件几个主要下载分类

    昨日晚间国内著名局域网聊天网站即时通讯软件,突然进行内容方面的大规模调整,其中聊天软件频道已经关闭,影视内容跳转向在线观看的飞鸽大全页面.据悉,即时通讯软件几个主要下载分类都会关闭,但尚不涉及关站.即 ...

  9. Linux即时通讯软件都有哪些?政企要怎么挑选?

    随着电脑的普及,现在市面上有许多使用Windows系统的用户,但不少政企出于自主可控的需求,逐渐开始采用Linux系统和基于Linux内核开发的操作系统电脑.但随着而来的一个问题,原先使用的即时通讯软 ...

  10. 浅析私有化即时通讯软件的用处有哪些

    现代企业对于即时通讯软件已经不再陌生,可以使用它进行企业内部实时沟通及协同办公.即时通讯可以作为企业统一的内部沟通工具,还可以设置权限管理,保护企业信息数据安全.可以协助企业高效办公,无论员工在外出差 ...

最新文章

  1. 一次失败的机巡平台对接经历分享
  2. 用WSDL定义Web服务
  3. 未来一瞥:机器人码农
  4. 一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对
  5. 第53天:鼠标事件、event事件对象
  6. [html] 请使用canvas画一个椭圆
  7. comparator 字符串比较大小_java – 如何使用Comparator比较空值?
  8. 魅族17系列渲染图曝光:“防爆盾”后盖引网友无限吐槽
  9. 【leetcode】数组的度-两个map关联初探
  10. 【快学springboot】使用springboot发送邮件
  11. 算法:逆序局部链表 Reverse Linked List II
  12. excel打不开html格式的文件,excel文件打不开提示格式无效怎么解决【图文】
  13. newifi3刷机 php,newifi3breed解锁新路由3刷机免解锁刷breed详细方法老毛子Padavan固件...
  14. 计算机键盘运算符号输入,电脑上感叹号怎么打出来(电脑键盘符号大全)
  15. SpringCloud Gateway堆外内存溢出排查
  16. 重装也无法修复此计算机,win10系统重装|Win10“重置此电脑”时出现问题解决教程...
  17. C++的异常[转载]
  18. 2022年终总结(学习篇)
  19. h5发送短信以及判别用户浏览器版本
  20. Bootstrap知识点

热门文章

  1. postgres关键字、常量和数据类型
  2. 高通平台DDR3初始化
  3. 【kali-漏洞利用】(3.3)Metasploit后渗透(下):后渗透模块使用
  4. HBO解密:他们为什么要开发VR版《西部世界》
  5. RabbitMQ队列声明channel.queueDeclare()参数解析
  6. SAP中采购收货冲销和退货适用情形简析
  7. java使用d3_D3 快速入门指北
  8. python可以查ip地址吗_python实现查询IP地址所在地
  9. linux 释放内存
  10. 打造前端MAC工作站(五)让我们熟悉一下 MAC 命令行吧!