VB语言对UDP聊天系统设计.docx
《VB语言对UDP聊天系统设计.docx》由会员分享,可在线阅读,更多相关《VB语言对UDP聊天系统设计.docx(25页珍藏版)》请在冰豆网上搜索。
VB语言对UDP聊天系统设计
综合课程设计报告
基于UDP协议的聊天系统设计
学生姓名:
指导教师:
董尼
所在系:
电子系
所学专业:
电子信息工程
年级:
20xx年x月x日
基于UDP协议的聊天系统设计
3.1数据库模块设计...........................
附录…………………………………………………
摘要
网络设计与实践旨在普及本专业学生网络基础知识与网络应用、管理、维护与开发等基本技能,加强网络教学的实践环节,培养学生对网络的实际应用能力。
经过实训,掌握网络的基本连接方法、Internet基本服务配置、Intranet技术、交换机与路由器等网络设备的使用与基本操作及VisualBasic的应用等。
1.1实验目的
掌握UDP协议,理解协议的深意,学习VB的编程方法及数据库的一些应用
1.2实验原理
不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。
因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。
同时,当您在使用Winsock控件的过程中,这个控件不会显示在正在执行的窗体之中。
换句话说,Winsock控件是在后台运行的一种控件。
在执行过程之中,不会具有任何选用、可见的控件。
第二章系统分析与总体设计
2.1使用VB控件的介绍
1.winsock2.labelmandbutton4.textbox5windowsmediaplayer
mondialog
2.2winsock控件的介绍
1.Winsck控件的主要属性
属性名
说明
BytesReceived
返回接收的数据,可以用GetData方法来获取它
LocalHostName
返回本机名
LocalIP
返回本机IP
LocalPort
返回或设置本机所用的端口,如果为0则为随机产生
Protocol
返回通信所用的协议
RemoteHostName
返回通信对方的计算机名
RemoteHostIP
返回通信对方的IP
State
返回Winscok的当前状态,取值如下
∙sckClosed(常量为0):
关闭状态
∙sckOpen(常量为1):
打开状态
∙sckListening(常量为2):
侦听状态
∙sckConnectionPending(常量为3):
连接状态
∙sckResolvingHost(常量为4):
解析主机中
∙sckHostResolved(常量为5):
已解析主机
∙sckConnecting(常量为6):
正在连接
∙sckConnected(常量为7):
已经连接
∙sckClosing(常量为8):
客户端正在关闭
∙sckError(常量为9):
连接发生错误
2.Winsock的主要方法:
方法名
作用
listen
使服务器程序处于侦听状态,等待客户端的连接请求
connect
用于客户端向远程发送一个连接请求,语法:
Winsock.connect[IP,Port]
Accept
用于服务器接收一个远程客户端的连接请求,语法:
Winsock.AcceptrequestID
sendData
用于向远程发送数据,语法:
Winsock.sendData数据
getData
用于接收远程发送来的数据,语法:
Winsock.getData变量
Close
关闭通信
3.Winsock的主要事件:
事件名
说明
Connect
当服务器接收客户端请求时,服务端发生的事件
DataArrival
有数据到达时发生的事件,可以在这个事件中来getData发送来的数据
ConnectionRequest
客户端用Connect方法时服务器发生的事件,可以在这个事件中来Accept一个连接请求
SendProgress
发送数据中发生的事件,可以在这个事件中来标示当前已经发送多少数据
SendComplete
发送数据完成发生的事件
Error
通信发生错误时发生的事件
Close
关闭通信时发生的事件
第三章实验实验步骤和主要是想
3.1实验步骤
如何选用适用的协议
当您准备开始使用Winsock控件之前,首要的工作是如何选择适用的协议类型。
如同先前所述的,您可以选择TCP协议或是UDP协议中的一种。
但是这两种协议的差异点在哪里呢?
虽然,它们同样可以使用在Internet或是Internet环境之中,但是主要的差异在于连接的状态。
以下是这两种协议的特点说明:
TCP协议是属于面向连接的协议。
所谓的面向连接协议是指——“在您可以交换数据之前,在两个终端设备之间必须连接成功”。
同时,在网络的基础理论之中,都会特别强调TCP具有错误核对的功能。
也就是说,在数据的传送过程中,如果发生错误或是数据无法传达对方时,TCP协议将会重复尝试着重新传送数据。
因此,核对以及重新传送的能力,因此起传输效率会比Internet协议或是巨域网络协议差一些(netBIEUI、IPX、AppleTalk)。
UDP协议是属于无面向连接协议。
这种协议为适用在两个设备之间,适用于信息传送以及数据的传输方面。
但是在使用时,必须注意当你将信息送出时,对方可能已经离线,因而无法接收到数据,而您也无法实时察觉到对方已经离线。
此外,使用UDP协议的最大数据传送量,完全取决于网络的传输量。
因此,此种协议较为适用于局域网络。
因此,当您在建立应用程序并且选用适当的协议之前,务必先依据应用程序使用的环境来选择适用的协议。
UDP连接的基础
在建立UDP的应用程序时,其过程会比TCP协议简单许多。
这是由于UDP协议在数据传送之前,可以不需要特别明确的连接方式。
但是,在上述的TCP连接方式之中,Winsocke控件必须设置在“监听(Linsten)”状态之下,同时在客户端准备与主机进行连接时,主机端也必须要使用Accept方法来允许客户端所要求的连接。
反观在UDP协议方面,双方仅仅需要使用Bind方法,即可与对方连接并且传输数九,因此,UDP协议连接过程的处理方式确实比TCP简单许多。
下面介绍使用UDP协议来传送信息的过程。
Winsock控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等……
废话不多说,来看看他有些什么重要的属性、方法和事件吧!
在VB6.0中的工具箱里默认情况下是没有这个控件的,添加方法如下:
在工具箱上右击,选择[部件],然后在部件对话框中选择"MicrosoftWinsockControl6.0",后确定即可。
如果没有这个复选框的话,请点击[浏览]按钮后在打开的[添加ActiveX控件]对话框选择MSWINSCK.ocx后选择打开,再点确定即可。
第四章实验模块设计及功能
4.1数据库的使用
数据库的还原及备份:
1.新建数据库:
新建数据库:
命名为“yonghu”
打开数据库的表:
新建表命名为“yonghu”
如图:
写入一行内容方便写程序
4.2UDP模块设计
4.2.1实验设计主要是想
当本机登录聊天模块时,怎么知道远程计算机是否在线!
(1)、应用端口号来判断
就是winsock绑定端口,然后发送信息给对方,对方通过发过来的信息的远程端口号,判断该执行那些命令,然后让软件自动的发送文件给对方!
比如登录界面绑定个winsock端口,登录时像整个局域网发送信息,对方接受登录发来的信息,告诉自己上线机子,同时判断发送过来的远程端口,如果端口是登录发来信息的端口,那么就自动回馈个信息各对方告诉他我也在线!
(2)、应用数据库来判断:
在数据库中建立表格两行,第一列为默认用户名“xxx”,第二列为“ip地址”。
当自己上线时,向局域网广播自己的ip地址及用户名,本机将在数据库中添加本机ip地址,默认用户名“xxx”,当登录之后会定时向局域网广播自己的ip地址(时间为1ms)。
远程计算机进行判断,第一次广播在线后,远程计算机将在数据库中添加本机的ip地址,本机第二次广播后,远程计算机将收到的ip地址与数据库中的内容进行比较,存在跳出sub,不再多次显示在线,不存在显示一次并保持与存入数据库。
到本机下线时,远程计算机将删除数据库中的本机ip地址,而本机将删除所有ip地址。
4.2.2实验方案一模块设计图
1.实验方案一(应用端口号的模块)
(1)、登录模块图
(2)、发送接受模块图
(3)、提示模块图
2.实验方案二(应用数据库的模块)
(1)、登录模块图
(2)、登录后的窗体
(3)、发送接受模块图
总结
经过几天的学习,研究和开发,我们小组选择的课题基本完成。
其功能基本符合网络实训的要求,能够查询课程,添加课程,修改课程等。
虽然由于自己知识上的不足,有些地方有少许错误和容错性能比较低,功能还不够完善,但是还是可以基本完成课程开设系统应有的功能。
在实训过程我会到了许多知识,这也是在大学里第一次比较完整的完成一个小项目,虽然过程中遇到了许多困难,在同学和老师的帮助下一一克服了。
通过不断的发现问题,总结问题和解决问题的过程,使我在此次实训设计活动中不断的提高,和得到了宝贵的经验。
参考文献
1、刘兵.计算机网络概论.中国水利水电出版社
2、何玉洁麦中凡.数据库原理及应用.人民邮电出版社
3、龚沛曾杨志强陆慰民.VisualBasic程序设计教程.高等教育出版社
4、明日科技高春艳李俊民刘斌斌.VisualBasic程序开发范例宝典.人民邮电出版社
致谢
这是我们的第最后一次参加实训了,但这门课程实训给我们提供了许多在今后的工作,提供了很好的基础。
所以我很感谢学校对我们的重视,给我了这次实训的机会和良好的实训环境。
在这次实训中,我们小组在组长的带领下,积极工作,各尽所能,顺利的完成了实训任务。
在这里,对其他同学的努力,也是不得不提的,大家都是在自己负责的部分,兢兢业业,非常认真。
所以,我们才能得到最后的成功。
一个星期的时间很快过去了,虽然董老师为了我们能够更充分的准备给了我们一个月的时间去准备,但是我们一直都是看资料准备,真正动手去做是在这短短的一个星期的时间。
在这次实训的整个完成过程中,我们过的非常充实和有收获,组长带着我们从看教学视频了解UDP和数据库到看例子了解实践去做,虽然系统并不是非常的完满,但是让我们了解了的知识是丰富的。
在此一定要感谢董老师,是他对我们的严格要求锻炼了我们自己去动手去尝试,解决问题的能力,让我们获益匪浅。
只有自己动手试出来的,才真正是自己的。
我们的组员也非常团结,认真对待组长分给我们的任务,我们也从中懂得了团队精神的重要性。
很快我们就要大四了,这个学期的实训可能将是我们大学四年的最后一次实训,我们相当重视、珍惜这次机会,而这次实训的结果将是我们今后我们工作、学习中遇到新的、不会的问题可以从容不迫的面对的一个重要基石,促进我们不断前进。
附录
方案一代码(应用端口号)
(1)、登录模块代码
PrivateSubCommand1_Click()
DimdataAsString
DimsAsString
data="用户:
"+Text1.Text+"IP:
"+Me.Winsock1.LocalIP
Me.Winsock1.RemoteHost="172.16.255.255"
Me.Winsock1.RemotePort=4601
Me.Winsock1.SendDatadata
Me.Winsock1.RemoteHost="172.16.255.255"
Me.Winsock1.RemotePort=4700
Me.Winsock1.SendDatadata
s=Text1.Text
Me.Winsock1.RemoteHost="127.0.0.1"
Me.Winsock1.RemotePort=4700
Me.Winsock1.SendDatas
Me.Hide
Form1.Show
EndSub
PrivateSubCommand2_Click()
Dimdata1AsString
DimdAsString
d=Text1
data1="用户:
"+Text1+"IP:
"+Me.Winsock1.LocalIP+"我下线了!
"
Me.Winsock1.RemoteHost="172.16.255.255"
Me.Winsock1.RemotePort=4700
Me.Winsock1.SendDatadata1
Me.Winsock1.RemoteHost="127.0.0.1"
Me.Winsock1.RemotePort=4700
Me.Winsock1.SendDatad
UnloadForm1
UnloadForm2
UnloadForm4
EndSub
PrivateSubForm_Load()
Me.Winsock1.Protocol=sckUDPProtocol
Me.Winsock1.Bind4601
Form1.Show
EndSub
PrivateSubWinsock1_DataArrival(ByValbytesTotalAsLong)
DimxAsString
Dimdata3AsString
Dimdata4AsString
Me.Winsock1.GetDatax
Text2=Me.Winsock1.RemotePort
Text3=x
IfText2=4601Then
IfMe.Winsock1.LocalIP=Me.Winsock1.RemoteHostIPThen
c=Me.Winsock1.RemoteHostIP
data4=""
Me.Winsock1.RemoteHost=""+c+""
Me.Winsock1.RemotePort=4700
Me.Winsock1.SendDatadata3
EndIf
IfMe.Winsock1.RemoteHostIP<>Me.Winsock1.LocalIPThen
c=Me.Winsock1.RemoteHostIP
data3="用户:
"+Text1.Text+"IP:
"+Me.Winsock1.LocalIP
Me.Winsock1.RemoteHost=""+c+""
Me.Winsock1.RemotePort=4700
Me.Winsock1.SendDatadata3
EndIf
EndIf
EndSub
(2)、发送接受模块
PrivateSubCommand1_Click()
Form1.Hide
Form2.Show
EndSub
PrivateSubCommand2_Click()
DimdataAsString
Dimdata2AsString
DimbAsString
DimeAsString
IfText3=""Then
Form1.Hide
Form4.Show
EndIf
IfText3<>""Then
e=Text3.Text
data2=Text2.Text
data=data2+":
"+vbCrLf+Text1.Text
Me.Winsock1.RemoteHost=""+e+""
Me.Winsock1.RemotePort=4700
Me.Winsock1.SendDatadata
Text4=Text4+Text2+":
"+vbCrLf+Text1+vbCrLf+CStr(Now())+vbCrLf
Text4.SelStart=Len(Text4.Text)
Text1.Text=clr
EndIf
EndSub
PrivateSubCommand3_Click()
IfText7=""Then
CommonDialog1.Action=3
Text4.ForeColor=CommonDialog1.Color
ElseIfText7=1Then
CommonDialog1.Action=3
Text2.ForeColor=CommonDialog1.Color
ElseIfText7=2Then
CommonDialog1.Action=3
Text3.ForeColor=CommonDialog1.Color
ElseIfText7=3Then
CommonDialog1.Action=3
Text4.ForeColor=CommonDialog1.Color
ElseIfText7=4Then
CommonDialog1.Action=3
Text1.ForeColor=CommonDialog1.Color
ElseIfText7=5Then
CommonDialog1.Action=3
Text6.ForeColor=CommonDialog1.Color
EndIf
EndSub
PrivateSubCommand4_Click()
IfText8=""Then
CommonDialog1.Flags=cdlCFBothOrcdlCFEffects
CommonDialog1.Action=4
Text4.FontSize=CommonDialog1.FontSize
Text4.FontBold=CommonDialog1.FontBold
Text4.FontItalic=CommonDialog1.FontItalic
Text4.FontStrikethru=CommonDialog1.FontStrikethru
Text4.FontUnderline=CommonDialog1.FontUnderline
Text4.ForeColor=CommonDialog1.Color
ElseIfText8=1Then
CommonDialog1.Flags=cdlCFBothOrcdlCFEffects
CommonDialog1.Action=4
Text2.FontSize=CommonDialog1.FontSize
Text2.FontBold=CommonDialog1.FontBold
Text2.FontItalic=CommonDialog1.FontItalic
Text2.FontStrikethru=CommonDialog1.FontStrikethru
Text2.FontUnderline=CommonDialog1.FontUnderline
Text2.ForeColor=CommonDialog1.Color
ElseIfText8=2Then
CommonDialog1.Flags=cdlCFBothOrcdlCFEffects
CommonDialog1.Action=4
Text3.FontSize=CommonDialog1.FontSize
Text3.FontBold=CommonDialog1.FontBold
Text3.FontItalic=CommonDialog1.FontItalic
Text3.FontStrikethru=CommonDialog1.FontStrikethru
Text3.FontUnderline=CommonDialog1.FontUnderline
Text3.ForeColor=CommonDialog1.Color
ElseIfText8=3Then
CommonDialog1.Flags=cdlCFBothOrcdlCFEffects
CommonDialog1.Action=4
Text4.FontSize=CommonDialog1.FontSize
Text4.FontBold=CommonDialog1.FontBold
Text4.FontItalic=CommonDialog1.FontItalic
Text4.FontStrikethru=CommonDialog1.FontStrikethru
Text4.FontUnderline=CommonDialog1.FontUnderline
Text4.ForeColor=CommonDialog1.Color
ElseIfText8=4Then
CommonDialog1.Flags=cdlCFBothOrcdlCFEffects
CommonDialog1.Action=4
Text1.FontSize=CommonDialog1.FontSize
Text1.FontBold=CommonDialog1.FontBold
Text1.FontItalic=CommonDialog1.FontItalic
Text1.FontStrikethru=CommonDialog1.FontStrikethru
Text1.FontUnderline=CommonDialog1.FontUnderline
Text1.ForeColor=CommonDialog1.Color
ElseIfText8=5Then
CommonDialog1.Flags=cdlCFBothOrcdlCFEffects
CommonDialog1.Action=4
Text6.FontSize=CommonDialog1.FontSize
Text6.FontBold=CommonDialog1.FontBold
Text6.FontItalic=CommonDialog1.FontItalic
Text6.FontStrikethru=CommonDialog1.FontStrikethru
Text6.FontUnderline=CommonDialog1.FontUnderline
Text6.ForeColor=CommonDialog1.Color
EndIf
EndSub
PrivateSubForm_Load()
Me.Winsock1.Protocol=sckUDPProtocol
Me.Winsock1.Bind4700
Text4.Locked=True
Text6.Locked=True
EndSub