使用VB设计方案聊天室多点对多点网络程序设计方案.docx
《使用VB设计方案聊天室多点对多点网络程序设计方案.docx》由会员分享,可在线阅读,更多相关《使用VB设计方案聊天室多点对多点网络程序设计方案.docx(18页珍藏版)》请在冰豆网上搜索。
使用VB设计方案聊天室多点对多点网络程序设计方案
课程设计任务书
9.多点对多点网络程序设计,根据网络数据传输原理设计聊天室软件,具体要求:
1)学习计算机网络连接原理;
2)学习网络数据传输的基本原理;
3)学习网络连接的底层协议;
4)设计聊天室软件;
5)面向用户的操作界面;
6)具有文件共享功能。
目录
一、设计目的1
二、设计任务与要求1
三、开发软件介绍1
四、设计内容4
1、设计框架4
2、设计程序5
3、运行结果12
五、设计总结15
六、设计心得16
七、参考文献16
一、设计目的
通过本课程设计的学习,学生将复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力,为学生完成毕业设计任务打下基础。
二、设计任务与要求
多点对多点网络程序设计,根据网络数据传输原理设计聊天室软件,具体要求:
1)学习计算机网络连接原理;
2)学习网络数据传输的基本原理;
3)学习网络连接的底层协议;
4)设计聊天室软件;
5)面向用户的操作界面;
6)具有文件共享功能。
三、开发软件介绍
微软公司的VisualBasic6.0是Windows应用程序开发工具,使目前最为广泛的、易学易用的面向对象的开发工具。
VisualBasic提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。
故而,实现本系统VB是一个相对较好的选择。
在VisualBasic中,可通过属性、方法和事件来说明和衡量一个对象的特征:
●事件(Event)
事件是指发生在某一对象上的事情。
事件又可分为鼠标事件和键盘事件。
例如,在命令按钮(CommandButton)这一对象上可能发生鼠标单击(Click)、鼠标移动(MouseMove)、鼠标按下(MouseDown)等鼠标事件,也可能发生键盘按下(KeyDown)等键盘事件。
总之,事件指明了对象“什么情况下做?
”,常用于定义对象发生某种反映的时机和条件。
●方法(Method)
方法是用来控制对象的功能及操作的内部程序。
例如,人具有说话、行走、学习、睡觉等功能,在visualBasic中,对象所能提供的这些功能和操作,就称作“方法”。
以窗体为例,它具有显示(show)或隐藏(hide)的方法。
总之,方法指明了对象“能做什么?
”,常用于定义对象的功能和操作。
●属性(Property)
属性是指用于描述对象的名称、位置、颜色、字体等特征的一些指标。
可以通过属性改变对象的特性。
有些属性可以在设计时通过属性窗口来设置,不用编写任何代码;而有些属性则必须通过编写代码,在运行程序的同时进行设置。
可以在运行时读取和设置取值的属性成为读写属性,只能读取的属性成为只读属性。
总之属性指明了对象“是什么样的?
”,常用于定义对象的外观。
如同上面的内容所描述的,不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。
因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。
同时,当您在使用Winsock控件的过程中,这个控件不会显示在正在执行的窗体之中。
换句话说,Winsock控件是在后台运行的一种控件。
在执行过程之中,不会具有任何选用、可见的控件。
那么该如何使用Winsock控件呢?
它可以被应用在那些类型的应用程序之中呢?
以下所列出的内容,是这个控件可以应用的大致范围:
*将客户端所收集的数据,传送给主机端。
*聊天和文件传输室应用程序。
*电子公告栏。
*voip(voiceoverTCP/ip)
VBwinsock介绍
Winsock是Mcrosoftwindows提供的网络编程接口,它供了基于TCP/IP协议接口实现方法.通过网络进行的数据通信,需要用地址来表示网络中的主机.TCP/IP协议使用IP地址来作为主机的标识.实现的连接方式是通过IP地址来识别的.通常情况下每台设备运行的不止一个程序,所以为了使用应用程序间的连接,还需要建立一个地址标识.在TCP/IP中使用端口来作为标识号(PORT).IP地址+端口地址.
TCP:
实现提供双向,有序无从复的数据流服务,流量控制+差错检测+纠错等功能.
1.VB控件winsock是个运行中不可件的控件,常用属性如下:
bytereceived接收到的字节数
localhostname本地机器名
LocalIP本地IP地址
Localport本地通信程序的端口
Remotehost远程机器名
RemotehostIP远程IP地址
Remoteport远程通信程序端口
Sockethandle提供调用API得句柄参数
State连接得当前状态
Protocol使用协议
Bytereceived:
反应接收到得数据量,以字节为单位。
State:
返回当前连接状态
0关闭状态
1打开状态
2监听状态
3连接挂起
4解析域名
5正在连接
6以建立连接
7正在关闭
8出错
2.控件
accept接受一个连接请求。
格式:
对象.acceptrequestID
bind:
多协议接口下,把接口卡,IP地址捆绑再一起。
格式:
对象。
Bina端口号,ip地址
close:
关闭连接。
格式:
对象。
Close
connect:
发送连接请求。
格式:
对象。
Connect〔ip,远程端口〕
getdata:
取出数据后清除缓冲区。
Peekdata:
取出数据后不清楚缓冲区。
格式:
对象。
Getdata(peekdata)变量〔,数据类型〔,最大长度〕〕
Listen:
侦听。
格式:
对象。
Listen
Senddata:
发送数据。
格式:
对象。
Senddata
3.控件事件
Close远程设备关闭连接时触发事件
Connect建立连接,进行通信时触发
Connectrequest有连接请求时触发
Dataarrival有数据到达时触发
Error错误时触发
Sendcomplete完成一次数据传送触发
Sendprogress数据传送进度
四、设计内容
1、设计框架
2、设计程序
服务端:
OptionExplicit//强制声明变量
PrivateSubCommand1_Click()
Iftcp.State=7AndText2.Text<>""Then//winsock=7表示已连接
tcp.SendDataText2.Text//发送数据
Text1.Text=Text1.Text&"本机:
"&Text2.Text&vbCrLf
//显示自己发送的信息,换行显示
Text2.Text=""//文本清空
Text2.SetFocus//设置焦点
EndIf
EndSub
PrivateSubCommand2_Click()
DimForm2AsNewForm2//定义数据传输窗口
Form2.Show//显示数据传输窗口
EndSub
PrivateSubForm_Load()
tcp.LocalPort=8888//本地监听端口为8888
tcp.Listen//开始监听
EndSub
PrivateSubtcp_ConnectionRequest(ByValrequestIDAsLong)//连接请求
Iftcp.State<>0Thentcp.Close//如果不是关闭状态,关闭跳
tcp.Acceptrequested//接收请求ID
EndSub
PrivateSubtcp_DataArrival(ByValbytesTotalAsLong)//对方数据到达
DimstrdataAsString//定义字符串型
tcp.GetDatastrdata//获取数据传递给变量strdata
Text1.Text=Text1.Text&"客户端:
"&strdata&vbCrLf
//发送过来的信息,换行显示
EndSub
图3编辑服务端主窗口
客户端:
OptionExplicit//强制声明变量
PrivateSubCommand1_Click()
Iftcp.State=7AndText2.Text<>""Then//winsock=7表示已连接
tcp.SendDataText2.Text//发送数据
Text1.Text=Text1.Text&"本机:
"&Text2.Text&vbCrLf
//显示自己发送的信息,换行显示
Text2.Text=""//文本清空
Text2.SetFocus//设置焦点
EndIf
EndSub
PrivateSubCommand2_Click()
DimForm2AsNewForm2//定义数据传输窗口
Form2.Show//显示数据传输窗口
EndSub
PrivateSubtcp_DataArrival(ByValbytesTotalAsLong)
DimstrdataAsString//定义strdata为字符串
tcp.GetDatastrdata//接收数据
Text1.Text=Text1.Text&"服务端:
"&strdata&vbCrLf
//在文本框显示消息,换行显示
EndSub
PrivateSubzyq2_Click()
Dimp,myipAsString//定义p,myip为字符串
p=InputBox("输入对方的端口")//输入端口号
myip=InputBox("输入对方的IP")//输入IP
tcp.RemotePort=p//设置端口
tcp.RemoteHost=myip//设置IP
tcp.Connect//连接
EndSub
图4编辑客户端主窗口
传输窗口(服务端):
OptionExplicit
PrivateSubcmdSend_Click()
DimFName_OnlyAsString
IftxtFileName=""Then
MsgBox"你没有选择要发送的文件...",vbCritical
ElseIffrmServer.tcpServer.State<>sckClosedThen
FName_Only$=GetFileName(txtFileName)
SendFileFName_Only$
EndIf
EndIf
EndSub
主要作用:
发送用户选择的文件。
PrivateSubForm_Load()
tcpServer.LocalPort=Port
tcpServer.Listen
bInconnection=False
Status"侦察....(没有连接)"
EndSub
主要作用:
设置连接端口并侦察网络。
PrivateSubForm_Unload(CancelAsInteger)
SendData"服务器关闭,"
Pause500
tcpServer.Close
End
EndSub
PrivateSubtcpServer_Close()
IftcpServer.State<>sckClosedThentcpServer.Close
Form_Load
EndSub
PrivateSubtcpServer_ConnectionRequest(ByValrequestIDAsLong)
OnErrorGoToIDERROR
IftcpServer.State<>sckClosedThentcpServer.Close
tcpServer.AcceptrequestID
bInconnection=True
Status"侦察...连接."
SendData"Accepted,"
ExitSub
IDERROR:
MsgBoxErr.Description,vbCritical
EndSub
主要作用:
判断是否接收信息。
PrivateSubtcpServer_DataArrival(ByValbytesTotalAsLong)
DimCommandAsString
DimNewArrivalAsString
DimDataAsString
StaticDataCntAsLong
tcpServer.GetDataNewArrival$,vbString
Command=EvalData(NewArrival$,1)
Data$=EvalData(NewArrival$,2)
SelectCaseCommand$
Case"OpenFile"'openthefile
DimFnameAsString
Fname$=App.Path&"\"&Data$
OpenFname$ForBinaryAs#1
Status"文件打开...."&Data$
Case"CloseFile"'closethefile
Close#1
Status"文件传输..."
Pause3000
Status"侦察...(连接)"
CaseElse'a4169bytestringofincomingdata
Put#1,,NewArrival$
txtView=txtView&NewArrival$
DataCnt&=DataCnt&+1
Status"RecievingData..."&(MAX_CHUNK*DataCnt&)&"bytes"
EndSelect
EndSub
主要作用:
文件传输。
PrivateSubcmdBrowse_Click()
cdOpen.ShowOpen
IfNotvbCancelThen
txtFileName=cdOpen.FileName
EndIf
EndSub
主要作用:
通过通用对话框打开需要传送的文件。
图5编辑服务端文件传输窗口
传输窗口(客户端):
PrivateSubcmdConnect_Click()
bReplied=False
tcpClient.ConnectText1.Text,1256
lTIme=0
While(NotbReplied)And(lTIme<100000)
DoEvents
lTIme=lTIme+1
Wend
IflTIme>=100000Then
MsgBox"找不到服务器!
",vbCritical,"ConnectionError"
tcpClient.Close
ExitSub
EndIf
cmdBrowse.Visible=True
cmdSend.Visible=True
EndSub
主要作用:
实现与服务器的连接。
PrivateSubcmdSend_Click()
DimFName_OnlyAsString
IftxtFileName=""Then
MsgBox"你没有选择要发送的文件...",vbCritical
ElseIftcpClient.State<>sckClosedThen
FName_Only$=GetFileName(txtFileName)
SendFileFName_Only$
EndIf
EndIf
EndSub
主要作用:
发送文件。
PrivateSubtcpClient_DataArrival(ByValbytesTotalAsLong)
DimCommandAsString
DimNewArrivalAsString
DimDataAsString
StaticDataCntAsLong
tcpClient.GetDataNewArrival$,vbString
Command$=EvalData(NewArrival$,1)
Data$=EvalData(NewArrival$,2)
SelectCaseCommand
Case"Accepted"'serveracceptedconnection
bReplied=True
Status"连接."
Case"ServerClosed"
Form_Load
tcpClient.Close
Case"OpenFile"'openthefile
DimFnameAsString
Fname$=App.Path&"\"&Data$
OpenFname$ForBinaryAs#1
Status"文件打开...."&Data$
Case"CloseFile"'closethefile
Close#1
Status"文件发送成功..."
Pause3000
Status"Connected."
CaseElse
Put#1,,NewArrival$
txtView=txtView&NewArrival$
DataCnt&=DataCnt&+1
Status"接收数据..."&(MAX_CHUNK*DataCnt&)&"bytes"
EndSelect
EndSub
主要作用:
判断连接状态。
图6编辑客户端文件传输窗口
3、运行结果
图7运行客户端主窗口
图8客户端进行连接
图9输入服务端端口号
图10输入服务端IP地址
………………
五、设计总结
…………
六、设计心得
…………
七、参考文献
………………