基于VB的QQ聊天.docx

上传人:b****7 文档编号:11266873 上传时间:2023-02-26 格式:DOCX 页数:36 大小:1.88MB
下载 相关 举报
基于VB的QQ聊天.docx_第1页
第1页 / 共36页
基于VB的QQ聊天.docx_第2页
第2页 / 共36页
基于VB的QQ聊天.docx_第3页
第3页 / 共36页
基于VB的QQ聊天.docx_第4页
第4页 / 共36页
基于VB的QQ聊天.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

基于VB的QQ聊天.docx

《基于VB的QQ聊天.docx》由会员分享,可在线阅读,更多相关《基于VB的QQ聊天.docx(36页珍藏版)》请在冰豆网上搜索。

基于VB的QQ聊天.docx

基于VB的QQ聊天

摘要

随着现代社会的不断进步,信息传递和信息交流越来越受到人们的重视。

在古代,通过飞鸽传书,通过烽火报警,通过快马传递上级命令等到近代的电报可快速明确的传递信息,在到当代使用电话,email,电脑,传真等,其中在国内人们比较喜欢用的聊天工具就是QQ聊天工具,它可以在网上实施即时通信,传输文件和图片并且进行语音或者视频聊天等等,方便人们进行情感交流、业务洽谈、多方会议,可以足不出户就能达到自己的目的。

既然QQ工具有这么多好处,那么它是怎么实现的呢?

本设计的目的就是在Vb编程平台上,使用Winsock控件实现客户端与服务器端的通信。

由于受技术和知识的限制本设计仅能实现基本的单人聊天和多人聊天及添加好友功能。

 

关键词:

VB6.0,QQ聊天系统,Winsock

 

目录

第一章设计的概述1

1.1设计的目的1

1.2设计的意义1

第二章系统的设计2

2.1模块设计2

2.2开发环境3

2.3系统的整体流程3

2.4数据库设计3

第三章winsock基础5

3.1Winsock控件基础5

3.2Winsock控件的属性6

3.3Winsock控件的方法7

3.4Winsock控件事件8

第四章CtListBar和TUOPAN控件10

4.1Ctlistbar和TUOPAN控件的使用10

4.2CtListBar的方法10

4.3CtListBar的属性10

4.4TUOPAN控件的介绍11

第五章程序设置12

5.1用户的登陆12

5.2注册17

5.3添加好友19

5.4单人聊天21

5.5多人聊天23

第六章系统的调试与运行26

6.1系统的调试26

6.2系统的运行27

第七章课题设计总结与工作展望32

7.1课题设计总结32

7.2工作展望32

参考文献33

 

第一章设计的概述

1.1设计的目的

为了跟进时代,实现通过网络连接来实现聊天和文件传输以及语音、视频通话等,本设计目前仅以实现基本的聊天功能和添加好友功能为设计目的,来实现现代流行的网络聊天工具的一小部分,本设计程序界面类似于QQ的好友界面,通过VB6.0并结合数据库来实现这些基本的聊天功能。

1.2设计的意义

随着现代社会的不断进步,信息传递和信息交流越来越受到人们的重视。

在古代,通过飞鸽传书,通过烽火报警,通过快马传递上级命令等到近代的电报可快速明确的传递信息,在到当代使用电话,email,电脑,传真等,其中在国内人们比较喜欢用的聊天工具就是QQ聊天工具,它可以在网上实施即时通信,传输文件和图片并且进行语音或者视频聊天等等,方便人们进行情感交流、业务洽谈、多方会议,可以足不出户就能达到自己的目的。

为了跟得上时代,能与社会接轨。

此聊天工具实现了基本的聊天功能,并且能够添加好友,还能实现群聊和私聊的功能,当然这与现在流行的网络聊天工具相比仅仅是一个非常不完善的程序,还不能够满足当代人的需求,本实验小组希望在以后的工作和学习中能够不断的去完善这个程序,做到让大家都能够接受并且认可这个聊天工具。

 

第二章系统的设计

2.1模块设计

本系统中的Winsock控件采用TCP连接协议进行连接。

根据需要系统分为:

1.服务器端模块;2.客户端模块。

1.服务器端模块

此模块主要起到了一个中转的作用,将一个客户端的信息发到指定的另一个客户端。

此模块中共有三个winsock数组,分别实现不同的功能:

(1)第一个winsock它可以在用户登陆的时候验证用户是否存在,若不存在,要进行注册,客户将注册信息提交到服务器端,服务器为用户分配一个用户号,再将用户号插入到information信息表中,提示用户注册成功。

(2)用户登陆成功后,第二个winsock开始实现其功能,即客户对这一winsock发出连接请求,记录客户的远程IP和端口号和分配给客户端的winsock的索引值,并显示在服务器端的列表中,在online表中插入记录包含分配给客户端的winsock的索引值、用户号、客户的远程IP和端口号,以明确谁在线上,给在线好友发送在线信息,给该客户发送好友信息、检查是否有人加自己为好友、处理客户端对加好友的响应,若答应其请求则将双方用户号插入到friend表的记录中,此外,它还处理着该设计最主要的功能,即单聊和多聊功能。

(3)第三个winsock起作用是在用户想要查询好友和加好友时,检查要加好友是否已经加过,或是否已经要求加过,或者加的是否是自己。

2.客户端模块

客户端模块分为登陆模块、QQ主模块、单人聊天模块、多人聊天模块、添加好友模块。

登陆模块:

实现用户的登陆和注册功能,用户输入正确的用户名和密码方能进入主界面。

(1)QQ主界面模块:

可以看到好友的在线状态,可以连接到单人聊天界面、多人聊天界面和添加好友界面。

(2)单人聊天界面:

用户双击QQ主界面的列表好友项可进入此界面,可点击发送按钮发送信息给个人或用快捷键发送。

(3)多人聊天模块:

所有人发布的信息都将显示在聊天记录中。

(4)添加好友模块:

用户可查询要加好友的用户名、昵称、地址,可以将查询的用户添加为好友,若好友是自己或已加好友,则会给出错误提示。

2.2开发环境

结合所要开发的系统的特点,系统将使用VisualBasic6.0中文版来作为开发工具,后台数据库则用Access2000。

2.3系统的整体流程

图2-1系统整体流程

2.4数据库设计

本系统将使用Access作为数据库管理系统(DtataBaseManagementSystem,DBMS)。

在Access中,新建一个数据库,将其命名为db1.mdb。

(1).登录表如表2-1

表2-1登录表

字段名称

数据类型

说明

备注

User_ID

自动编号

用户ID

关键字段

User_psw

文本

用户登录密码

不能为空

(2).用户信息表如表2-2

表2-2用户信息表

字段名称

数据类型

说明

备注

User_ID

文本

用户ID

关键字段

User_name

文本

真实名字

不能为空

User_addr

文本

用户地址

不能为空

Nicheng

文本

用户昵称

(3).在线人数表如表2-3

表2-3在线人数表

字段名称

数据类型

说明

备注

Num

数字

用户使用的winsock的索引

不能为空

People_id

文本

登录表中的用户id

不能为空

People_ip

文本

用户使用的ip

不能为空

People_port

文本

用户占用的端口号

不能为空

(4).好友关系对应表如表2-4

表2-4好友关系对应表

字段名称

数据类型

说明

备注

User_ID

文本

用户ID

不能为空

Friend

文本

好友用户号

不能为空

(5).好友关系对应表如表2-5

表2-5好友关系对应表

字段名称

数据类型

说明

备注

Friend_id

文本

好友用户号

不能为空

My_id

文本

用户号

不能为空

第三章winsock基础

3.1winsock控件基础

在VisualBasic网络通讯的程序设计环境中,winsock控件确实是一个非常有用的控件。

在程序设计时看不到winsock控件显示在窗体上,但是它可以提供程序设计依据。

此外,在这个控件的使用上,您可以非常容易的要求控件为您调用TCP或是UDP网络服务的功能。

而本设计就是使用了其中的一种:

TCP网络服务功能。

下面让我们来一起熟悉一下TCP协议。

一、TCP基础

TCP协议是目前比较流行的通讯协议。

它的全名为“传输控制协议(TransferControlProtocol)”,它是一种面向连接的协议。

因此,当您使用TCP协议连接两个网络上的设备时,将可以在它们之间交换希望交换的数据。

如果开发的应用程序属于主从式应用架构,将必须知道应用系统主机的IP地址(利用RemoteHost属性取得)以及连接端口号(利用RemotePort属性取得)。

这些数据都齐全后,您才可以进一步调用、连接。

如果正在建立主机端应用程序时,必须指定本机(执行应用程序所在的计算机)所用的连接端口号(LocalPort属性),接着将Winsock控件设置为“监听(Listen)”,即可等候远程客户进行调用与连接。

当主机接收到客户端调用并且要求连接的信息时,将会触发“要求连接事件(ConnectionRequest事件)”,接着进行标准允许或拒绝的程序。

一旦主机与客户端连接完成之后,您就可以开始使用“传输数据(SendData)方法”,将数据传送给对方,并利用“传送完成(SendComplete)事件”。

此时,您可以使用“取得数据(GetData)方法”,来取得这些连接到的数据。

上述程序将周而复始的发生,直到发生“中断连接事件”或是不正常的连接为止。

则属于winsock控件TCP协议的运行特色。

二、UDP基础

UDP协议全名为“用户数据报协议”,其运行方式与TCP有所不同,一般使用UDP并没有所谓的主机端和客户端的限制。

由于UDP在本设计中并未用到,所以它的细节在此就不介绍了。

3.2winsock控件的属性

(1)属性名称:

Index(属于active控件)

功能:

在集合对象之中

语法:

对象表达式(index)

(2)属性名称:

LocalHostName

特点:

数据具有只读性,并且在设计过程中无法读取属性的内容。

语法:

对象表达式.LocalHostName

返回值:

字符串

(3)属性名称:

LocalIP

特点:

数据具有只读性,并且在设计过程中无法读取属性的内容。

语法:

对象表达式.LocalIP

返回值:

字符串

(4)属性名称:

Localport

功能:

返回或设置本机连接端口号

特点:

数据具有可读性,在设计过程中可以进行设置或读取。

当您所连接的端口号指定为“0”时,表示程序在执行过程中,将会自动取得可以使用的连接端口号。

对于客户端来说,本机连接的端口号是“将数据传送出去的端口号”。

对于主机端来说,是“监听客户端提出连接请求的连接端口号”

语法:

对象表达式.LocalPort

返回值:

长整数

(5)属性名称:

protocol(winsock控件)

功能:

返回目前使用的协议名称,或是设置即将使用的协议名称。

协议名称为“TCP”或是“UDP”两者之一。

语法:

对象名称.protocol[=protocol]。

返回值:

void。

(6)属性名称:

RemoteHost(属于ActiveX控件)

功能:

返回或设置用来传送和接收数据的远程计算机设备名称。

特点:

可以使用别名或是IP地址。

语法:

对象表达式.RemoteHost=字符串。

(7)属性名称:

RemoteHostIP

功能:

返回远程计算机设备的IP地址。

返回值:

字符串。

(8)属性名称:

RemotePort(属于ActiveX控件)

功能:

返回或是设置用连接远程主机所使用的连接端口号。

语法:

对象表达式.Remote=Port。

(9)属性名称:

State(属于Winsock控件)

功能:

返回枚举类型的控件状态值。

特点:

数据具有只读属性,并且在设计过程中无法取得属性值。

语法:

对象表达式.State。

返回值:

整数。

表3-1state关键值表

常数

说明

Sckclosed

0

默认值,已经关闭控件

Sckconnected

7

已经连接上

3.3Winsock控件的方法

(1)方法名称:

Accept

特点:

仅仅用于TCP主机端的应用程序。

当远程计算机要求连接时,即使用这种方法来产生一个连接专署的处理值。

与ConnectionRequest事件一起使用

语法:

对象表达式.AcceptrequestID

数据类型:

长整数

返回值:

Void

(2)方法名称:

Bind

功能:

为TCP连接指定被使用的LocalIP以及LocalPort

语法:

对象表达式.bindLocalPort,LocalIP

方法名称:

Close

特点:

关闭TCP连接或是socket监听

语法:

object.close

参数:

返回值:

Void

(3)方法名称:

GetData(属于Active控件)

特点:

不支持已经被命名的参数

语法:

object.GetData(format)

(4)方法名称:

GetData(属于Winsock控件)

功能:

从缓冲区里面取出数据,并且将数据储存为Variant类型的变量之中

返回值:

Void

语法:

对象表达式.GetDatadata,[type,][maxlen]

(5)方法名称:

Listen

功能:

建立一组Socket且将这组socket设置成监听模式。

特点:

这种方法仅仅使用于TCP连接中。

语法:

对象表达式.Listen。

参数:

无。

返回值:

void。

(6)方法名称:

SendData

功能:

将数据传送给远程计算机

语法:

对象表达式.SendDatadata

返回值:

void

3.4Winsock控件事件

(1)事件名称:

Close

触发:

当远程计算机关闭连接时,将会触发此事件。

因此,应用程序必须使用close方法来关闭正在连接中的TCP连接。

语法:

对象表达式_Close()

参数:

无。

(2)事件名称:

ConnectionRequest

触发:

当客户端向主机发出连接请求时,将会触发该事件。

特点:

仅仅使用在TCP连接的应用软件上面。

并且当远程计算机向主机发出连接请求时,才会触发该事件。

同时此事件被触发之后,远程计算机的RemoteHostIP以及remotePort等信息,都将会被存储到相对应的标识数据组里。

语法:

对象表达式_ConnectionRequest(requestIDasLong)

(3)事件名称:

DataArrival

触发:

当客户端发出连接请求时,将会触发此事件

语法:

对象表达式_DataArrival(bytesTotalasLong)

 

第四章CtListBar和TUOPAN控件

4.1Ctlistbar和TUOPAN控件的使用

(1).Ctlistbar控件的使用

在本设计中成功登陆后是通过Ctlistbar控件来实现好友的显示和好友分组的显示,在Ctlistbar控件中单击已添加好友昵称,即可出现聊天界面,同时也可以通过相关操作来实现对好友分组的删除与添加的控制,或者是删除好友等等。

(2).TUOPAN控件的使用

为了实现登陆窗口的最小化,且能在屏幕的右下角显示相对应的图标功能,因此通过VB安装包本身自带的相应的程序来生成TUOPAN控件(自己命名)

4.2CtListBar的方法

表4-1CtListBar的方法

方法

返回类型

说明

AddList

integer

添加一个新的分组

DeleteList

boolean

从控件中删除一个已有分组

AddListItem

integer

在一个分组中新添加一个项目

DeleteItem

boolean

在一个分组中删除一个项目

InsertListItem

short

在某一分组中的某一位置插入一个新的项目

ClearLists

void

清除控件中的所有分组和项目

4.3CtListBar的属性

表4-1CtListBar的属性

属性

数据类型

说明

BackImage

Picture

设置控件背景图片。

利用这个属性,可以实现“皮肤”的功能。

BarHeight

integer

设置分组按钮的高度。

BorderType

integer

设置控件的边框样式

BorderColor

long

设置控件的边框颜色,仅当BorderType设置为“0-Regular”时有效。

ButtonBackColor

long

设置分组按钮和上下滚动按钮的颜色。

ButtonForeColor

long

设置分组按钮和上下滚动按钮的字体颜色。

ButtonSize

integer

设置上下滚动按钮大小。

GradientFill

boolean

设置控件背景是否显示渐变色。

GradColorFrom

long

设置渐变色的起始颜色。

GradColorTo

long

设置渐变色的结束颜色。

IconSize

integer

设置图标显示模式是大图标或小图标。

Image1-6

Picture

设置预先在控件中加载的6幅图片。

ListBarStyle

integer

设置控件纵向或是横向显示。

ListBackColor

long

设置控件的背景颜色。

ListForeColor

long

设置分组中项目文字的颜色。

ListScrollSpeed

integer

设置项目滚动的速度。

ItemScrollSpeed

integer

设置分组滑动的速度。

4.4TUOPAN控件的介绍

1.生成TUOPAN控件的方法:

本设计使用控件法来实现托盘的效果,在VB安装盘里找到(目录为:

COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY)!

在Tool文件夹里查找一个名叫Systray的目录,将它拷贝到硬盘,用VB打开该目录下的工程,稍作改进(如更换图标、添加功能等),然后编译成ocx控件,之后在VB中可以直接调用。

2.TUOPAN控件的属性:

InTray属性是用来设置是否显示在托盘中,True为显示在托盘,False为不显示;

TrayIcon属性是在托盘中显示的图标式样;

TrayTip属性是鼠标移动到该控件上面时,显示提示文字。

第五章程序设置

5.1用户的登陆

本设计采用TCP协议,因此,在介绍客户端时需要同时介绍与其相关的服务器程序。

先运行服务器端,再运行客户端。

一、客户端:

登陆界面如图5-1:

图5-1登陆界面

登录流程图如图5-2:

图5-2登录流程图

1.尝试与服务器的ws2控件组建立连接

PrivateSubForm_Load()

ws1.RemoteHost="127.0.0.1"‘远程计算机设备的IP地址

ws1.RemotePort=1002‘远程计算机联机端口设为1002

ws1.Connect

EndSub

2.在登陆界面中填写用户名和ip和端口号,若信息有为空的,则会给出提示。

若都没有空,则发向服务器验证。

PrivateSubcmd1_Click()

IfText1.Text=""OrText2.Text=""OrText3.Text=""Then

MsgBox"请确认信息后再登录!

"

Text3.SetFocus

ElseIfFrmc1.Wc.State=0Then

Frmc1.Wc.RemoteHost=Text1.Text‘远程计算机的IP地址为text1的内容

Frmc1.Wc.RemotePort=Text2.Text’远程计算机联机端口为text2的内容

Frmc1.user=Text3.Text‘用户昵称设为text3的内容

Frmc1.Wc.Connect‘Wc连接服务器

Fori=0To100000

DoEvents

Next

IfFrmc1.Wc.State<>7Then

MsgBox"无法连接,连接超时!

"

Frmc1.Wc.Close

Else

UnloadMe

EndIf

Else

MsgBox"您已连接!

"

EndIf

EndIf

EndSub

二、服务器端:

服务器端主机图片如图5-3:

图5-3服务端主机

 

客户端流程图如图5-4:

图5-4服务端流程图

1.客户端有用户请求登陆,服务端响应:

PrivateSubWs1_ConnectionRequest(ByValrequestIDAsLong)

Fori=0ToWs2.UBound

IfWs2(i).State=0Then

Ws2(i).AcceptrequestID‘接收连接

ExitFor

EndIf

Next

Ifi=Ws2.UBound+1Then

LoadWs2(Ws2.UBound+1)‘多个用户请求联机,则产生多个Ws2

Ws2(Ws2.UBound).AcceptrequestID

EndIf

EndSub

2.显示好友在list:

PrivateSubWs2_DataArrival(IndexAsInteger,ByValytesTotalAsLong)

Dimst,s,m,hAsString

Dimv,o,nAsInteger

st=""

Ws2(Index).GetDatast

s=Left(st,1)

t=Right(st,Len(st)-1)

Ws2(j).SendData"s"&m&"|"&v‘发送”s”,”m”和”v”所代表的信息

DoEvents

Ws2(j).SendData"f"&h

EndSub

3.服务端向所有用户发送系统信息:

PrivateSubCmd1_Click()‘点击服务器端的发送按钮

IfList1.ListCount<>0Then‘如果有用户登录则会向用户发送系统信息

Fori=0ToWs2.UBound

IfWs2(i).State=7Then

Ws2(i).SendData"x"&"系统消息:

"&Text2.Text

DoEvents

EndIf

Next

Text1.Text=Text1.Text&"系统消息:

"&Text2.Text&Chr(13)&Chr(10)

Text1.SelStart=Len(Text1.Text)

Text2.Text=""

Text2.SetFocus

EndIf

EndSub

5.2注册

一、客户端:

在用户没有注册的情况下,用户可点击“注册”按钮,进入注

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1