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

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 并利用附带的安装程序安装到网络服务器上就可以真正实现" 联网" 了。

什么仇什么怨?还原日本反美颜应用Primo真面目 横跨2D与3D!专属C#开发者的超强游戏引擎Paradox 首份“2014年移动外语学习行业报告”等你下载 《近匠》Ayla联合创始人张南雄:物联网发展的三个阶段 神器 VisuAlgo:通过动画学习算法和数据结构 【工具推荐】QWrap——开源的前端JavaScript框架 老外看中国:移动应用UI设计的十大精髓 HTML5正名记:两家机构的博弈与一种标准的诞生 电池技术为何停滞不前?革新技术尚未出现 如何设计优雅的移动游戏? 前方高能!盘点2014年最颠覆三观的智能硬件 俄罗斯当局封杀GitHub,理由是教唆自杀 裁员110人、关闭工作室,Rovio重组求出路! 全Swift开发、代码开源!有钳的Firefox for iOS 详解开源游戏开发框架HaxePunk的主要特性 《程序员》杂志休刊通知 2014 TOP50最具价值CTO获奖名单揭晓! TIOBE 2014年12月编程语言排行榜:R和Swift成为年度语言候选者 免费增值应用正在“杀死”游戏开发者? 直接Mark!开源的DevOps开发工具箱 Apache Mesos联合创始人Benjamin Hindman:谈分布式应用现状 直觉不靠谱!使用移动应用分析的七个巧妙方法 屏蔽、挖角与丑闻,Uber的“创收神器”泡沫 蚁视科技发布会:三大产品与四大概念技术 盘点VS2015 预览版的5个新特性 低能的“智能” 你就是明星,第一届IBM RockStar正式启动! Kubernetes:Google分布式容器技术初体验 方法可以复制 AngularJS资源集合 那些年,微信走过的开放之路 从YunOS话阿里移动互联网云生态布局 用OPENGL编制基于对话框的程序要求把所绘的三维图形显示在对话框的一个区域??? 谁知道用socket通信,一秒鈡最多可以传多少条? 我要是想把已有SQL数据库变成*.SQL文件到别的机器上直接建库怎么做? 我用标准输入输出流来输入字符串到string的对象里,为什么得不到空格和以后的字符? 转一篇文章——有关LSD的罐头 (有点长,没耐心的就不用看了^o^) 送分! 超过10个回复请勿再进!!! VC程序调试问题 懂电路分析者请进 求树型菜单的代码??马上给分!!! VC可以调试可执行文件吗??? 请高手指点迷津 :) 求树型菜单的代码?? 如何使列表控件的第一列居中(包括标题文本和内容文本)??? 用查表法按ALPHA混合R、G、B也会这么慢?奇怪!(有源码)(50 怎样用vc开发一个动态链接库让PB调用,要求参数为字符串 3dmax 的问题 关于用alert("信息!")弹出的对话框 up up up up up up up up up up up up up 请问“IE登录时”为什么Domino检测不到我的Username and password? 着急,这条sql语句怎么写?????? 爱的密码 散分啰!!统计BCB论坛现有成员... 这样的COM组件如何实现? 请教:我想学lotus,可不知哪有lotus和lotus教程下载,望指教! 多选项提交过来的值是什么类型的? ORA-03113: end-of-file on communication channel谁知道??高手救命! 星际争霸几大战略(大家切磋切磋) CHtmlView的刷新问题 关于asp.net加密的讨论 怎么样把两个ArrayList合并成一个??我在文档里找了半天也没找到!急~~!!!!!!!! 》》》菜鸟发问:SQL SERVER2000 可以对 office 文档进行全文检索吗? How to alter DBGrid Scrollheader Color? c怎样访问数据库啊?一定给分! from里的参数传递为ENCTYPE="multipart/form-data"时的问题? 网吧问题 如何在txt文件中查找字符 请问如何实现当进入一个combox时自动下拉列表框(不用用鼠标去点) 关于volatile 修饰词 过去用Delphi开发数据库都是用Access,现在急需使用SQL Server。请问:我必须掌握SQL Server中的那些内容。 如果我想删除日志文件的所有记录该怎么办?????? 怎么样把两个ArrayList合并成一个??我在文档里找了半天也没找到!急~~!!!!!!! 请问,NT4.0下怎样配置网关和路由? 请问如何知道一个弹出菜单是否以经关闭 升级后问题,奇怪,请指教? 什么是存储过程? 大侠们帮忙看看,简单问题 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169. 请问怎样才能在Access中选取指定行数的记录如第5-10条. 关于XML命名空间的疑问?请教各位高手帮帮忙!谢谢! 请问哪里有《情深深雨蒙蒙》下载??? ******斑竹快出来啊 看看我这个贴子啊!!!!!!!!!!!!!! 如何读取寄存器中的数据? 有一个周长62.8米的圆形草坪,准备为它安装自动旋转喷灌装置进行喷灌,现有射程为20米,15米,10米的三种装置有一个周长6.28米的圆形草坪,准备为它安装自动旋转喷灌装置进行喷灌,现有射程为20 一个底面积是300平方厘米,高10厘米的长方体里面装有5厘米的深的水,把一块石头完全浸没在水里,水面上...一个底面积是300平方厘米,高10厘米的长方体里面装有5厘米的深的水,把一块石头完全 一块三角形地的面积是0.3公顷,底边上的高是80米,底边长多少米?如题 一个长25厘米,宽15厘米,高10厘米的长方体水箱内盛有4厘米高的水,一个打竖放,一个打横放,打竖放的水面高度是多少厘米?为什么? 其人已心怪之的“已”是什么意思? 一块三角形地的面积是0.3公顷,底边上的高是80米,底边长多少米?说理由 中国古代有什么水果 各种水果代表的含义?六月一日是儿童节,我们班决定做水果拼盘,能不能告诉我各种水果代表的含义啊?急.(要求:注意,不是生日蛋糕,如果是这种,我可以自己去找.) 一块三角形菜地的面积是0.3公顷,底是150米,它的高是多少米? 我国古代有哪些主要的果蔬类? 一块梯形麦田,上底是600米,下底是400米,高是30米.这块麦田的面积是多少平方米?和多少公顷? 《满满一大杯牛奶》问题. 一个出身贫苦的男孩,为了积攒学费而挨家挨户地推销商品.  这天傍晚,他奔走了一整天,又累又渴又饿,可身上只剩下一毛钱.他决定向下一户人家讨一口饭吃. 中国进口水果我想了解中国从哪些国家进口哪些水果,谢谢~ 英语翻译蔬菜协会(用英语怎么说)英语翻译 一个梯想如果上底怎加5分面积增加5平方分米就成了平行四边形如果原梯形的上底是3分米那么梯形面积是多少 一块梯形菜地,上底240米,下底360米,高是下底的一半,他的面积是( ),和( )公顷复制回答 我不想买一些水果翻译 一瓶200ML的纯牛奶,我第一次喝了四分之一,加满水摇晃后,又喝了三分之一.这时瓶中剩下几毫升纯牛奶 把5个苹果放进4个盘子里,会有几种分法? 一个长方体水箱长80厘米,宽40厘米,高60厘米,箱面水面离箱口6厘米箱内有水多少升? 有三种盒装牛奶(200ml的2.5元 250ml的3元 190ml的2.2元)比较牛奶的净含量和售价,购买哪种更合算?急……………………急是不是用毫升除以钱数得出售价? 水果店中,2斤苹果和3斤桔子共值21元,3斤苹果和2斤桔子共值16.5元,问1斤苹果多少元? 水果店运来一些水果,菠萝的筐数比苹果少三分之二运来苹果24筐,运来的菠萝比苹果少多少筐?2、水果店运来一些水果,苹果的筐数比菠萝少三分之二,运来苹果24筐,运来的菠萝多少筐? 购买哪种牛奶比较合算 第一盒 :200ml 2.5元 第2盒 :380ml 3.8元 第3盒 :1l 9元 一块梯形地,上底和下底分别为50米和100米高80米它的面积( )公顷 水果店运来一些水果.菠萝的筐数比苹果少4分之1.运来菠萝15框,运来苹果多少筐?(方程解) 直角三角形的底为6分米,求这个梯形的面积! 一块梯形的面积是0.12公顷它的上底与下底的和是80米高是多少米用方程解 一个三角形图形,三角形面积是0.6公顷,底长300米,有多大? 个底为6分米,高为15分米的直角三角形右侧对接上一个梯形,拼成了一个平行四边形,求这个梯形的面积.以五年级的公式写出来行么? 一个梯形面积是1.5公顷上底是80米高是100米下底是多少米 一瓶色拉油有5升. 这句话对吗 用两个完全一样的梯形拼成一个平行四边形.梯形的底是18分米,高是9分米,梯形的面积是多少? 一个梯形菜园它的上底是150米下底比上底多50米高是80米共收菜3570千克平均每公顷收菜多少千克快 一个面积是2.4公顷的三角形苗圃,底边长1200米,高是多少米? 在底6米,高15米的直角三角形右侧接上一个直角梯形形成平行四边形,求梯形的面积 一块梯形麦地,面积是0.12公顷.它的上底与下底的和是80米,高是多少米?(用方程解) 一个面积是2.4公顷的三角形苗圃,底边长1200米,高是多少米 下图石油两个完全一样的梯形拼成的平行四边形.已知每个梯形的面积是240平方米,梯形的高是多少分米?阴影部分的梯形,上底是5分米,下底是25分米 上图是由两个完全一样的梯形拼成的平 长方体,底面积300平方厘米,高10厘米,里面有5厘米水.一石头放入水中,水面升高了2厘米.石头的体积是多少 一瓶大可乐有几升?一瓶纯净水有几毫升?家用电饭煲的容量是几升?纯净水,就是矿泉水,1.50元 的多少升啊? 一种牛奶每箱25元,现在甲乙两家商店,甲按九折出售,乙商店买10送1,哪家的牛奶便宜?这个问题没有告诉要买多少东西,题就是这样的,并不是我没写.我也为这个问题苦恼, 一个底面积300平方厘米高10厘米的长方体盛有5厘米的水把一块石头浸在水里水上升2厘米石头体积多少立方厘米 一般色拉油的容量是多少? 一个梯形的面积是68.4平方分米上、下底之和是36分米,这个梯形的高是多少厘米? 有一个底面积是300平方厘米,高10厘米的长方体,里面盛有5厘米深的水.现在把一块石头浸没到水里,水面上升2厘米.这块石头的体积是多少立方厘米? 一个长50厘米,宽40厘米,高30厘米的长方体水箱,水深20厘米.如果放入一块棱长10厘米的正方体石块,那么水箱里的水面将上升多少厘米?(列式解答) 一个梯形的上底与下底的平均长度是30厘米,这个梯形的面积是多少平方分米? 有一个底面积是300平方厘米、高是10cm的长方体,里面盛有5cm深.现在把一块石头完全浸没水里,水面升2cm这块石头的体积是多少立方厘米? 霍华德 凯利医生所写的“医药费——一杯满牛奶”是什么意思? 一个长方体水箱,从里面量长40厘米,宽30厘米,深30厘米,箱中水面高10厘米,放进一个棱长20厘米的正方体后,铁块顶面仍高于水面,这时水面高多少厘米.(用方程解)今晚就要,求求各位大侠了,最 有一个面积为700平方米的圆形草坪,准备为它安装自动旋转喷灌装置进行喷灌,现有射程20米、15米和10米的三现有射程20米、15米和10米的三种装置.你认为应选哪种最合适? 水果品种的英语及翻译 霍华德·凯利医生所写的一满杯牛奶什么意思 中山公园的草坪中有一个自动旋转的喷灌装置,其射程为15米,它能喷灌的面积是( )平方米. 已知一个梯形的面积是40平方米上底是8.5米下底是11.5米高是多少米 霍华德·凯莉医生所写的“医药费: 草坪中有一个自动旋转的喷灌装置,其射程为10米.他能喷灌的面积是多少平方米? 已知梯形的面积是36平方米,上底是3米,下底是五米高是多少米? 为什么霍华德.凯利能成为一位大名鼎鼎的医生
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn