说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB如何用Visual Basic编写小型的网络系统

HTML文档下载 WORD文档下载 PDF文档下载
VB如何用Visual Basic编写小型的网络系统


中国科大附中 徐 江

Visual Basic 以下简称(VB) 十一个功能强大的编程语言。特别是4.0 以后,支持了OLE Automation 技术,给编程带来了更大的方便。前些时,我试着编写一个支持网络的数据库。但是由于没有联网,所以没法测试。于是,我想到了OLE Automation,用它就可以在一台机器上测试网络功能。经过改动,还可以用它通过Modem 来进行联机。下面,我介绍一下如何用Visual Basic 编写小型的网络系统。
首先,建立一个支持网络OLE Automation
启动VB。在窗体Form1 中建立一个列表框List1,在它上面建一个Frame1,设置它的Caption 属性为空。在它中间建立一个Label1,同样,设置它的Caption 也为空。最后,在List1 上建立一个Caption 为UserList 的Label2。最后,把一个定时器Timer1 安上,把它的Interval 设为3000,Enabled 设为False 就行了。至此,NetWorkConnection 的窗体部分就完成了。
随后,在VB 的Tools 菜单中选Options,按照填好各项内容。
接下来,在Insert 菜单中选取Module 建立一个新的模块Module1。在(General) 中输入填写进下列代码。

'(UserInfo数据类型)
Type UserInfo
Username As String
Alias As Integer
End Type
'(最大的用户数)
Public Const MaxUser = 10
'(定义消息)
Public Const Msg_User_LogOn = 1
Public Const Msg_User_LogOff = 2
'(设定数据类型)
Public Users (MaxUser) As UserInfo
Public Inbox (MaxUser) As String
Public UserSystemInbox As Integer
Public Online(MaxUser) As Boolean

Sub main()
Form1.Show
End Sub

UserInfo 数据类型记录了已经登录的用户的用户名和别名。在显示和通讯时只使用别名。用户名只作为判断用户是否有效时用。出于安全考虑,以上数据用户不能随意访问,必须通过下面的子程序来访问。
在Insert菜单中选取Class Module 建立一个新的类Class1。更名为Common,并设置它的各个属性。
填写进下列代码。
(提供获取用户ID 值的功能,用户可以通过此功能使用别名来返回ID值)

Public Function GetUserID(Alias As String) As Integer
For i = 1 To MaxUser
If Users(i).Alias = Alias Then GetUserID = i
Next i
End Function

(提供获得系统信息的功能。用户可以通过它了解用户是否有改动)

Public Function GetSystemMessage() As Integer
GetSystemMessage = UserSystemInbox
End Function

(提供获得用户信息的功能。用它来获取所有在线用户的别名,中间用"|"分开。)

Public Function GetUserInfo() As String
For i = 1 To MaxUser
If Users(i).Username < > "" Then
temp = temp + Users(i).Alias + "|"
End If
Next i
GetUserInfo = temp
End Function

(提供获得用户私有信息的功能。用来接受别的用户发送的信息。)

Public Function GetUserMessage(ID As Integer) As String
If ID < = 0 Or ID > MaxUser Then
Exit Function
End If
GetUserMessage = Inbox(ID)
End Function

(提供注销功能。用来退出网络。)

Public Function LogOff(ID As Integer) As Boolean
If ID < = 0 Or ID > MaxUser Then
LogOff = False
Exit Function
End If
If Users(ID).Username < > "" Then
Users(ID).Username = ""
LogOff = True
Else
LogOff = False
End If
UserSystemInbox = Msg_User_LogOff
'-------------- Update Form1 ------------
For i = 0 To Form1.List1.ListCount - 1
If Form1.List1.List(i) = Users(ID).Alias Then
'查找List1中的用户别名并删除
Form1.List1.RemoveItem i
Exit For
End If
Next i
If Form1.List1.ListCount = 0 Then '如果没有用户登录
Form1.Label1.Caption = "DisConnected"
Form1.timer1.Enabled = False
End If
End Function

(提供登录功能来上网)

Public Function LogOn(Username As String, Alias As String) As Integer
For i = 1 To MaxUser
If Users(i).Username = "" Then
Users(i).Username = Username
Users(i).Alias = Alias
LogOn = i
UserSystemInbox = Msg_User_LogOn '发送"用户登录"信息
'-------------- Update Form1 ------------
Form1.List1.AddItem Alias '有用户上网
Form1.Label1.Caption = "Connected"
Form1.timer1.Enabled = True
Exit Function
End If
Next i
LogOn = 0
End Function

(提供刷新用户是否在线标志的功能。使系统能够判断你是否在线上,如果在6 秒内没有调用此功能,系统将会把您自动删除。)

Public Sub Refresh(ID As Integer)
If ID < = 0 Or ID > MaxUser Then Exit Sub
Online(ID) = True
End Sub

(提供发送用户私有信息的功能。用来和其它用户传递信息。)

Public Function SendUserMessage(Message As String, ToID As Integer) As Boolean
If ToID < = 0 Or ToID > MaxUser Then
SendUserMessage = False
Exit Function
End If
Inbox(ToID) = Message
SendUserMessage = True
End Function

在Form1 的Code 中输入剩下的代码。

'(初始化Form1)
Private Sub Form_Load()
Label1.Caption = "DisConnected"
Form1.Caption = "NetWork Connected Server"
Form1.Show
For i = 1 To MaxUser
Users(i).Username = ""
Next i
End Sub

(通过判断Online 的值定时检查用户是否在线)

Private Sub timer1_Timer()
For i = 1 To MaxUser
If Users(i).Username < > "" Then
If Online(i) = False Then
For s = 0 To List1.ListCount - 1
If List1.List(s) = Users(i).Alias Then
List1.RemoveItem s
Users(i).Username = ""
UserSystemInbox = Msg_User_LogOff
'发送"用户注销"信息
End If
Next s
End If
Online(i) = False
End If
Next i
If List1.ListCount = 0 Then
'如果没有用户
Label1.Caption = "DisConnected"
timer1.Enabled = False
End If
End Sub

运行此程序。在启动另一个VB,开始编写用户部分。在默认窗体中按下图排好这些控件。

填入下列代码

Public ID As Integer
Public Connected As Object
Private Sub Command1_Click() '登录
Dim username As String
Dim alias As String
Set Connected = CreateObject("NetWorkConnection.Common") '启动NetWorkConnection
username = Text1.Text
alias = Text2.Text
ID = Connected.logon(username, alias) '登录并返回ID值
Timer1.Enabled = True
Command4_Click
End Sub

Private Sub Command2_Click() '注销
x = Connected.logoff(ID)
Timer1.Enabled = False
Set x = Nothing '释放对象
End Sub

Private Sub Command3_Click() '发送用户信息
Dim TempID As Integer
Dim TempString As String
Dim x As String
Dim y As Boolean
x = Combo1.Text
TempID = Connected.getuserid(x) '获得指定用户的ID值
TempString = Text3.Text
y = Connected.sendusermessage(TempString, TempID)
End Sub

Private Sub Command4_Click()
For i = 0 To Combo1.ListCount 1 '清空Combo1
Combo1.RemoveItem 0
Next i
x = Connected.GetUserInfo '接收用户信息
cd$ = x
lastst = 1
For i = 1 To Len(cd$)
If Mid$(cd$, i, 1) = "|" Then
Namef$ = Mid$(cd$, lastst, i - lastst)
Combo1.AddItem Namef$ '分离用户别名并加入Combo1
lastst = i + 1
End If
Next i
End Sub

Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 300
End Sub

Private Sub Timer1_Timer()
Connected.Refresh (ID) '刷新用户标志
x = Connected.GetSystemMessage() '接收系统信息
y = Connected.GetUserMessage(ID) '接收用户信息
If y < > "" And y < > Label6.Caption Then Label6.Caption = y
If x < > Val(Label4.Caption) Then '刷新Combo1
Label4.Caption = x
Command4_Click
End If
End Sub

开始运行。输入你的Username 和Alias,单击Log On,查看一下先前的VB 范例,看看你的名字是否在内。如果是,证明你的" 集线器" 成功了。这时,不管已登录的用户处于什么原因没有用LogOff 就中断联系,系统都会在6 秒后自动删除这些用户。确保其它用户不受影响。
这个程序经过改动,可以给它支持Modem 的功能。而用户部分的程序可以原封不动。编译时在Options 中选中Remote Support File 并利用附带的安装程序安装到网络服务器上就可以真正实现" 联网" 了。

检测声卡存在-Delphi资料 控制声音音量-Delphi资料 让pc speaker美妙动听-Delphi资料 闪动标题栏-Delphi资料 使用 DirectX 优化声音特性-Delphi资料 修改Delphi 3图形处理中的错误 用Delphi 3.0编制MP3音乐点歌台 用Delphi编制MP3音乐点歌台 用Delphi编制趣味动画鼠标 用Delphi开发屏幕保护预览程序 用DEPHI3.0实现动画ABOUT窗口-Delphi资料 在Delphi下用Direct Sound 实现混音器组件 在Delphi中使用DirectX BDE的替代品大全(按数据库类型分)-Delphi资料 BDE的替代品大全(按应用类型分)-Delphi资料 bde的组态文件-Delphi资料 DBGrid中的下拉列表和查找字段编程方法-Delphi资料 Delphi 3.0 中 连 接 数 据 库 的 三 种 方 式 Delphi 3.0中连接数据库的三种方式 Delphi 4中开发数据库控件的方法 Delphi:MIDAS中动态强制约束编程 DELPHI 中 自 适 应表 单 的 实 现 Delphi3数据库编程中的查找字段 Delphi3中 连 接 数 据 库 的 三 种 方 法 Delphi编程实现3DS动画的播放 Delphi访问ODBC数据库 Delphi如何实现在一个Dbgrid中显示多数据库 Delphi筛选数据 Delphi数据集过滤技巧 Delphi数据库应用程序开发中图像数据 Delphi下的ADO 要不要学c++ 不能保存文件了,怎么回事? CString的一个问 在vs,net中创建用户控件和组件有什么区别? Lotus Notes and Domino与LOTUS 1-2-3有什么差别? 问路 JBuilder中类找不到 Montaque,看到后请进,问题有点菜,但希望你尽快回答! 大家帮帮我啊谢谢 private的意义是什么呢? 这是怎么回事啊,经常遇到的问题 请问windows编程和windows网络编程哪种编译器最好 新手提问--初装redhat7.2问题多多 请问如何在iis中提供证书认证?急! ASP.NET能不能用记事本写?! ??如何获得在DataGrid控件中选中一条纪录的消息?? 在win2000上调试好的程序,为什么到了xp的iis下面关于access数据库写入的页就打不开了? 不通过键盘,不通过初始化,不用SetWindowText(),如何向一个编辑控制加字符串 maya里的动画如何渲染? 数据库中的超键是什么意思? 组件如何发布? 一个小问题(请斑竹不要删) 菜鸟提问:怎样才能在编程中把一个数据库生成一个HTML文件! long型能转换为int型么? datagrid中RadioButtonList被自动选择问题? c#中如何比较两个string的大小,如"AB">"AA" return * this 问题 急!!,我VC的一个库文件坏了! 现在真是失恋的季节,各位帮帮我,我是否该该怎么办? 在线等待WIN98操作系统下载的网址 关于模板特殊化的一些问题 三个小问题 那儿有GUN c++ 下载? 关于拨号的问题 学习VB.NET的方向在哪里 两个问题 急!!,我VC的一个库文件坏了! 2000写的程序,到98下运行,发现字体变型变的很厉害,如何解决? 急!!,我VC6的一个库文件坏了! 怎样才能使服务器端更改的数据主动发送的客户端的web上呢 问题,在线等! 关于cdonts的问题,在线等候!!! sos 问一个关联表格操作问题 TNMMSG和TNMMSGServ用于哪些场合?两台电脑之间的通讯能用它吗?是不是不稳定,速度也慢? 那个高手能教教我怎麽用编程实现软盘加密呀??? document.write("<%=server.htmlencode(HTMLstr)%>"); NickTang,thanks,please come in! 非计算机专业所受到的歧视 爲什麽不能重載它的构造函数呢.不知错在哪里? 高手帮我,vb里怎么放动态的.gif格式的图片???!! 家里进蛇寓意什么 阿拉伯语如何学习?阿拉伯语难学吗?如何入门呢? 漂亮阿拉伯语怎么说 家兔,野兔收购!有谁知道在河南开封内有那个地方在收购兔肉或者是生兔的地方呀?像大的食品公司这些.知道的请告诉一下, 请问,你学阿拉伯语? 我想看心理和哲学类的书籍, 生日那天蛇进了家里代表什么意思?不是梦见蛇进了家里. 怎样快速学阿拉伯语? [中翻英]可以谈论任何事 现在道路怎么形容,还有颜色等等 怎样套野兔 关于人死后脑电波存在多久?是否脑电波存在后将形成灵魂? 形容我是什么颜色的 哪里可以学阿拉伯语啊 灵魂我个人认为是类似于生物电能的存在(或脑电波),那么人死后会有能量散发,这些能量是不是带有生物电能呢?我们知道任何物质不可能凭空出现也不可能凭空消失的,这些能量是不是被空 如果用颜色来形容爱情,那么各个阶段的颜色是什么恶? 需要什么原料,具体步骤是什么, 世界上究竟有没有灵魂的存在?灵魂是否就是人的脑电波?人死后脑电波是否彻底消散? 填关联词1.大象( )在公路边上能看到,( )树林也能遇到. 丢勒 小野兔什么时间创做的 哲学与心理学 人的行为到底由什么决定请大家从哲学或者行为心理学的角度回答,我一直很困惑,人的行为本质上是物质的运动,那这种运动应该由其内在的客观规律支配,是不以人的主观意识 不准带食物和饮料的英文怎么说 珍惜时间的作文800字 人死后为什么会轻21克! 为什么猎人要捕捉动物 珍惜时间作文800字 心理学能了解人的那些方面 心理学与哲学有何等关系 一个猎人在森林里打死了一只野兔,可是在动物会上,为什么那只野兔还在那?因为森林里不止有一只野兔! 珍惜时间的作文,800字, 2011大学英语竞赛D类初赛多少分得奖102份能得奖么 颜色是怎样调出来的 冰心的《谈生命》主要按什么方法来说理的,阐述作者对生命怎样的认识 21克是灵魂的重量,每一个深爱着别人的人,死后体重会减少21克,那21克便是世界上最纯洁的爱,就算人去了,可爱还在,那减少的21克将会永远留在深爱的人身边------ 一克是宽容 一克是接 如图,一个猎人在O点处发现一只野兔正在他的正前方60米处的A点以10米/秒的速度沿水平方向向前奔跑,已知猎枪子弹的飞行速度是610米/秒.请问,若猎人向野兔正前方11米处瞄准并开枪,能否打中 考研高数怎么复习? “The purpose of life is to enjoy every moment.” 这是什么颜色?紫色.具体点,是哪几个颜色调出来的? 这是什么品种的猫头鹰? Life is very lovely enjoy every moment of it with smileAnd always do that what's your heart likeWhen follow own heart ruleAlways will be happy神马意思 大伙儿甩一把汗,就是一阵雨.是什么成语? 阿拉伯语谁学过? “不得而知”这个词的意思到底是知还是不知?形容某种情况,常用不得而知,到底是知道还是不知道呢?不得,是得不到消息,“而”是个转折,似乎是知道的意思.看有些书籍,好像又是知道的意思? 大伙儿甩一把汗就是一阵雨 写成语 野生动物保护协会最近我们镇上见到几个猴子怎么办 《河北省赤城县龙关镇》 不得而知是什么意思 大伙儿甩了一把汗,就是一阵雨的成语是什么 世界野生动物保护协会的会徽 不得而知是什么意思啊?不得而知到底是知还是不知啊?求解~~! 底字有多少笔画 大伙都甩一把汗,就能够下一阵雨翻译成成语是什么? 台湾女作家杏林子珍惜生命的事例急,求求了 家兔和野兔的区别比较比较,家兔和野兔有什么区别?它们为什么有这种区别. 什么头什么目 词语填空 要跟动物有关系的 高等数学求大神帮忙! 宠物兔野兔和家兔的区别我买了一只兔子,颜色是灰色的,很凶,请问它属于哪一种 请问这是野兔吗轻轻的我就给逮住了,不怎么凶 高等数学难吗?求大神帮助 家兔与野兔又什么区别最好能从几个方面来说 珍惜时间、父母的作文,500字父母十年前我们是父母的孩子十年后我们是孩子的父母十年前我不知道家的温馨十年后我才体会家的温暖十年前我渴望离家去远方十年后我渴望从远方回家十年前 漂亮的食物翻译成阿拉伯语怎么说
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘