QQ聊天功能在局域网中的实现
QQ聊天功能在局域网中的实现 |
蒲应文 |
|
《软件报》33期
编程语言:Basic编程工具:Visual Basic 6.0 【编程引子】 随着信息化建设步伐的加快,各公司都开始了局域网办公,其中利用Windows的信使服务功能实现各部门之间的联系已是常事,今天我们一起来设计一个局域网信使程序,本文在程序设计过程中没有使用任何网络组件和网络协议,只是使用了VB中的基本控件,编程难度不大,给初学者朋友提供了一个好的学习平台。来吧,一起看看本文的设计思想和方法! 【编程分析】 网络程序设计一般都要用到网络组件或网络协议,而本文则抛开这一切与网络相关的概念,采用“数据库+文件夹共享”方式实现在局域网内传递信息,乃至于聊天。 本程序只有一个执行程序和一个数据库文件,不分服务端和客户端,使用时,在服务器上共享一个文件夹,并将本程序和数据库置于其中,然后在客户端通过局域网运行本程序,发出消息后存入服务端数据库,各登陆用户从数据库中智能的提取各自的消息。即以共享文件夹中的数据库为桥梁实现数据传递。 【设计步骤】 一、数据库设计 使用VB自带的可视化数据管理器(VisData)创建数据库LanMsg.mdb,其中包括两个数据表user和message,user表用于管理聊天用户,其中包括3个字段:用户、密码、性别,message表用于保存聊天记录,其中包括5个字段:时间、用户、消息、接收者、状态,除“消息”字段为备注型(Memo),其它字段均为字符型(String)。 二、程序设计 本文重点介绍局域网聊天功能的实现,操作数据库选用最简单的Data控件,其方法完全适用于Adodc控件,只是连接数据库的代码和数据库记录操作的语法格式有所不同。 1、新用户注册 启动VB,新建一工程,添加一个窗体reg和必要的控件,新用户注册就是把新用户的注册信息写入数据库。编程方法和代码如下: ’连接数据库,MdbFn是数据库文件名 Data1.DatabaseName = MdbFn Data1.RecordSource = "select * from user where 用户=’" + MyName + "’" Data1.Refresh ’MyName是登陆用户自己的名字,下同 If Data1.Recordset.RecordCount > 0 Then ’用户存在则退出,代码略 End If Data1.Recordset.AddNew Data1.Recordset.Fields("用户").Value = Text1.Text Data1.Recordset.Fields("密码").Value = Text2.Text Data1.Recordset.Fields("性别").Value = Combo1.Text Data1.Recordset.Update 2、用户登陆 用户登陆是对用户的一个身份验证,如同QQ一样,本程序设计了“记住密码”、“自动登陆”功能,可以方便用户在运行程序后不用输入用户名和密码就可以自动登陆,这些信息保存在注册表中,通过VB中的SaveSetting和GetSetting函数完成。 向工程添加一个窗体Login和必要的控件,并把此窗体设置为启动窗体。这个窗体中需要完成数据库绝对路径的设置。程序代码如下: Pa = App.Path If Right(Pa, 1) <> "/" Then ShareName = Pa Pa = Pa + "/" ’子目录 End If MdbFn = Pa + App.EXEName + ".mdb" If Dir(MdbFn) = "" Then Exit Sub 注:ShareName是程序和数据库的绝对路径,不包括最后的“/”符号,在后文中使用,该文件夹将被共享。上面的代码表明:如果程序在根目录下运行则不共享(出于安全考虑)。 登陆时检查用户是否存在、密码是否正确,并保存用户名,登陆方式到注册表,代码如下: Data1.RecordSource = "select * from user where 用户=’" + MyName + "’" Data1.Refresh ’用户不存在则退出 If Data1.Recordset.RecordCount = 0 Then Exit Sub If Data1.Recordset.Fields("密码").Value <> Text2.Text Then MsgBox "密码错误!" : Exit Sub End If ’保存用户名信息,保存其它信息的代码略 SaveSetting App.Title, App.EXEName, "UserName", MyName 3、主界面设计 向工程添加一个窗体main和必要的控件。这个窗体模仿了QQ的主界面,能在屏幕四周任意位置隐藏(包括任务栏所在的一方,QQ则不能,代码参见源码)。 1)程序所在文件夹的共享和取消 程序在本机运行时自动共享程序所在的文件夹(所有权限),本程序为了提高程序和数据库的安全性(不被删除),在程序退出时自动取消文件夹的共享。在程序运行期间,程序和数据库处于工作状态,网上邻居的用户无法删除。文件夹的共享和取消通过调用Windows(Nt结构)中的Net命令完成,命令方式为: 共享:net share LanMsg$=ShareName /unlimited 取消:net share LanMsg$ /delete 上面命令中,share是net命令的参数,表示创建或取消共享文件夹,LanMsg$是共享后的名称,以$结尾能使其在网上邻居中不被显示,这样是为了隐藏共享文件夹,但输入路径可以访问。 是不是本机的判断用程序路径的前两个字符,非本机的程序路径以“//”开头,而本机的程序路径则以盘符开头。编程方法和代码如下: ’本机运行时共享所在文件夹 ShareCmd = "net share LanMsg$=" + ShareName + " /unlimited" If Left$(Pa, 2) <> "//" Then If ShareName <> "" Then WinExec ShareCmd, vbHide End If ’调用API函数WinExec执行命令 ’本机退出时取消所在文件夹共享 If Left$(Pa, 2) <> "//" Then ShareCmd = "net share LanMsg$ /delete /y" If ShareName <> "" Then WinExec ShareCmd, vbHide End If ’参数/delete表示取消文件夹共享 2)检查是否有消息 For i = 0 To Num ’Num是用户的编号,Xm是显示姓名的标签数组 Usr = Xm(i).Caption Data2.RecordSource = "select * from message where 接收者=’" + MyName + "’ and 状态=’未读’ and 用户=’" + Usr + "’" Data2.Refresh ’即:筛选其它用户(Usr)发出的MyName(自己)接收的未读(状态)的记录 If Data2.Recordset.RecordCount > 0 Then ’有消息来,此时改变标签的颜色以达到闪烁效果,并产生音效,代码略 End If Next 3)消息的收发 添加一个窗体Chat和必要的控件。当有消息来时,点击用户姓名可进入消息收发窗体,消息接收用定时器监测,并显示在文本框中,读出数据后,将相应记录状态修改为“已读”。编程方法和代码如下: ’连接数据库代码略 If Data1.Recordset.RecordCount > 0 Then While Not Data1.Recordset.EOF ’逐个读出信息到文本框,代码略 Data1.Recordset.Edit ’修改状态 Data1.Recordset.Fields("状态").Value = "已读" Data1.Recordset.Update Data1.Recordset.MoveNext Wend End If 消息的发出通过向数据库message表中添加记录实现,和添加用户的代码相似,略。 4)历史记录查询 添加一个窗体View和必要的控件。本文查询历史记录的方法和收取消息的方法相同,只是记录筛选的条件中只处理“已读”状态的记录,代码略。 5)消息记录的清除 为了防止别人偷看消息内容,本文设计了消息记录的清除功能,客户端用户可以清除自己发出的消息,而本机登陆的用户可以删除某个用户或所有用户的消息。编程方法和代码如下: Sub DelMsg(TheName) Data2.RecordSource = "select * from message where 用户=’" + TheName + "’" Data2.Refresh While Not Data2.Recordset.EOF Data2.Recordset.Delete Data2.Recordset.MoveNext Wend End Sub 6)用户的注销 对于使用本程序乱发消息的用户,本机登陆的用户有权注销非本机登陆的用户,注销用户的同时删除其所有消息记录,编程方法和删除记录的方法相似,只是处理的数据表变为user,代码略。 7)程序开机自动运行 程序设计了开机自动运行功能,这个功能通过调用API函数在注册表运行组添加项目而实现,本文使用的是注册表中的默认键名,编程方法和代码如下: ’相关API的声明略 Sub pAutoRun(AppName As String) sKeyName = "Software/Microsoft/Windows/CurrentVersion/Run" Ret = RegCreateKey&(HKEY_LOCAL_MACHINE, sKeyName, hKey) Ret = RegSetValue(hKey&, "", REG_SZ, AppName, 0&) Ret = RegCloseKey(hKey) End Sub 8)其它功能 本程序还设计了重新登陆、刷新用户、自动隐藏主窗体等众多功能,详细代码参见源码。 【编程后记】 本文为实现局域网消息传递功能,在设计思想上新颖,保证了执行程序和数据库的安全,但本程序在共享所在文件夹时给出了所有权限(发出的消息才能写入数据库),这为黑客的攻击提供了可乘之机,特别是局域网连接了互联网的朋友在没有安全可靠的防火墙保护下,在局域网内应慎重使用本程序。希望本程序在为你带来方便的同时也能给你带去好运和安全! |
QQ聊天功能在局域网中的实现相关推荐
- 基于 WebSocket、Spring Boot 教你实现“QQ聊天功能”的底层简易demo
目录 前言 一.分析 1.1.qq聊天功能分析 1.2.WebSocket介绍 1.2.1.什么是消息推送呢? 1.2.2.原理解析 1.2.3.报文格式 二.简易demo 2.1.后端实现 2.1. ...
- 手机web页面调用打开QQ聊天功能(个人项目经验)
在实现手机web功能时候,会出现咨询页面客服的需求,此时客服使用的是QQ方式交流,就要求能够调用手机QQ的聊天功能,这个其实很简单,希望下面的分享会对各位博友有用. 在代码中添加点击事件: <a ...
- go语言实现仿QQ聊天功能
1.实现原理 为了最大限度的减少服务器的负担,这里使用P2P模式实现仿QQ的聊天功能,服务器端和客户端职责如下: 1)服务器端:通过TCP方式实现客户端身份认证.向已经认证的用户推送好友信息.向其他登 ...
- android调用qq聊天功能
String url="mqqwpa://im/chat?chat_type=wpa&uin=2853700237"; startActivity(new Intent(I ...
- 教你如何在网站上挂qq聊天功能
QQ在线聊天代码,可以用做网页在线客服,还是免费的,呵 <A href="http://wpa.qq.com/msgrd?V=1&Uin=272000556&Site= ...
- 使用Qt5.9实现qq聊天功能(TCP通信)
利用Tcp协议在Qt里面实现通信,注意:客户端和服务端的网段必须在同一个网段才可以,要不然连接不上.并且改代码能够解决中文乱码问题.字符串.中文都可以发送. 服务器端代码: 首先在.pro文件加入: ...
- QQ聊天记录保存在哪个文件里?
问:最近我想重装QQ,但这样会丢失QQ聊天记录.我不是QQ会员,但我想将我的聊天记录保留下来,新装QQ后能继续看见,我应该怎么做?QQ聊天记录保存在哪个文件里? 答:QQ聊天记录保存的文件是: 盘符( ...
- 利用swipelistview完成qq聊天列表右滑删除功能
感谢HarryWeasley整理:http://blog.csdn.net/harryweasley/article/details/41413547 前言:前段时间,由于自己比较悠闲,没有什么工作上 ...
- 一键QQ聊天与一键加群QQ功能
最新有项目要求,点击页面上的一个按钮,实现直接启动QQ聊天,添加QQ群的功能. 开始以为会很复杂,百度后发现QQ已经有考虑到这方面的需求,只需进入:QQ推广 -> 推广工具 就能看到如下界面 Q ...
最新文章
- [BZOJ4557][JLOI2016]侦查守卫
- 如何0代码、快速定制企业级NLP模型?百度工程师详解技术选型与模型调优策略...
- Hexo+OSChina(码云)+git 搭建个人博客
- 学会用好 Visual Studio Code
- r语言数据变量分段_R数据分析:用R语言做meta分析
- ajax async
- linux_NandFlash_driver_超详细分析 .
- Python,入门1
- CentOS 7.5 重置 root 密码
- php要学ps吗,小蚂蚁学习PS切图(3)——小练习
- python发送文件_利用python传送文件
- java excel 导出加密
- pd.diff()函数详解
- 适合送礼的真无线蓝牙耳机南卡小音舱开箱测评!
- 当年谷歌为什么退出中国?
- IE8的调试工具使用详解(下)
- NLP-文本处理:词性标注【使用成熟的第三方工具包:中文(哈工大LTP)、英文()】【对分词后得到的“词语列表”进行词性标注,词性标注的结果用于依存句法分析、语义角色标注】
- OpenLayers使用
- 5G手机即将上市,新的创业风口来了!
- Java进阶必读书籍推荐