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

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

百度技术开放日感悟:看百度如何获取大数据时代的“船票” 谷歌亚马逊微软的烧钱游戏 拉手网CTO官冲:团购网在大数据应用上的探索 究竟谁真正关心比特币,不妨看看基于大数据的百万条推特分析 Firefox 29正式版:高度自定义模式、全新菜单和Australis UI 冼茂源:HBase在垂直搜索业务以及数据存储中的应用! 阿里云计算北京布点 全球第三个云数据中心开放 【走近讲师】友友天宇CEO姚宏宇:与行业结合是私有云厂商的重要出路 万亿移动支付产业的难点和痛点 削减硬件运营成本?亚马逊或自主研发ARM架构芯片 开源框架eMobc:XML开发原生移动应用so easy iOS应用安全开发,你不知道的那些事 市场化API的十个捷径 MongoDB和Cloudera结盟,欲征服大数据市场 红帽收购Inktank,将统一Gluster与Ceph? 那些巨头公司Logo是这么演变来的…… 以史为镜,剖析PaaS大迷局 “心脏出血”还不够?又曝OAuth和OpenID登录漏洞 走近讲师:搜狐于顺治讲述搜狐PaaS云平台实践之路 AppFlood 2014 Q1报告:亚洲和中东市场成为开发者出海首选 华为联合运营商构建能力开放平台 Facebook产品设计主管:揭秘公司如何招聘优秀设计师 【附信息图】美国因软件缺陷导致的十大事件 二十一世纪Windows简史 为什么用户体验和生态系统决定云公司的成败 三星Tizen,路漫漫其修远兮 用户体验是新优势,互联网会受到何种影响? 从GitHub看编程语言流行度 陈沙克:Openstack Horizon Icehouse Blueprint简介 叶琪:Hadoop不是万能的 要明确场景扬长避短 云网融合驱动数据中心技术聚变 CListControl 可以修改后面(〉1)的某一列数据吗? 猜谜,高智力者请进,英语好者也请进。 BCB5的编译中遇到Unable to open include file 'STRSTREAM.H'应该怎么办? CodeMax控件 讨论:单就数据库编程pb和delphi谁更优秀? 请问一下我用DELPHI工具生成了一个COM(DLL)可放在ASP中有VB编译错,错误如下,有谁知道怎么回事? tag的问题 为什么QuickReport控件绑定数据库某一表后,只能显示一条记录(在线,急,请给予解答) 想去深圳发展,请问深圳的同行,深圳的IT公司集中在那一带,附近的楼价什么价位? 讨论:单就数据库编程pb和delphi谁更优秀? 用ATL写Office COM-Addin的问题! WaitCommEvent()中的注解??? ActiveX问题,微软专家请进.<------------- 急 请问如何用VB在win2000下实现关机重启注销的操作 如何的XP下配置小网吧,请给出详细说明,,十分感谢!!! 关于malloc的问题!! 关于Sql Server的链接服务器功能(一定给分) 我想实现自动添加 抄送 和 主题 !!!!!!!! Applet指定codebase,怎样将其指定到classpath下?不用绝对路径! 在一个FORM中如何访问另一个FORM中的控件? sql2000+sql sp2的问题? tomcat问题 我想把两个很大的文件结合成一个文件,怎样做最快? 下载的问题??急~~ 在JSP中怎么实现折行?? 哪里可查到WINDOWS系统的全部消息和Delphi封装好的消息???当然要有解释 MDB最多能有多少条记录,文件最大能多大 “Rule for project "Project 1.exe" is not specified",是咋回事? 急问用table1.batchMove(Asource:TBDEDateSet;AMode:TBatchMode):longint移动数据时提示destination must be indexed.table.我建索引后还 VB 6.0 sp4出来了! 新增了许多有趣的控件,快去www.microsoft.com去看一直吧! 关于COM、MTS\COM+的客户端访问服务器端总是被拒绝的问题? 高手请进。。。。 求助各位高手,一个关于DLL的问题!(急!!!) java的多媒体问题! 请问哪里有crystal report 8.0下载 有几个使用VC++的问题请教 请教一两个问题: 关于虚父类、虚表的问题。 **RADIO BUTTON的问题** win2k下的oracle816的安装问题,紧急阿 如何通过INTERNET 远程联接ORACLE服务器,SERVER端IP地址是固定(ADSL),客户端是通过电话线上网的。 Delphi的编程环境 救命:如何读取像http://www.csdn.net/demo/demo.txt这样的文件存放到本地? vb调用vc编的activex 在DELPHI中怎样COPY一个文件夹? VB的界而的确容易制作,但似乎过于简单 如何在ATL环境下动态地开辟一个字符串型的缓存区 一句sql 关于中国软件业问题的一些看法 用xml做数据库是不是不安全 关于setwindowlong的问题!!! “阳光 露珠 小蚂蚁” 作文用阳光、露珠、小蚂蚁写作文 500字 要三个词都用上的 二楼楼层钢筋混泥土打多厚及相应的配比?以及钢筋长宽方向分布距离及钢筋的直径?柱子用的钢筋大小及直径农村建房;总共三层楼,底楼长12米宽7米;共9根大柱子;二三楼长12米宽9米;宽度 高中物理说课稿范例摩擦力求说课稿 作文:在大自然中,也许一朵鲜艳的小花,一株枯萎的小草,一滴晶莹的露珠,都能触发我编一则童话故事!500字左右 楼梯水平长度2.1米,垂直高度1.5米,再加两端各0.2米的楼梯梁,请问这段楼梯的钢筋长度应该是多少、只做直料,不用弯锚 以心中的太阳为话题的作文主要是写人的 由什么想到的 作文 抄袭或复制我都知道,已经找了半天了少来一个开头或片段只要知道怎么写下去就可以了,如果有完整的更好,2楼的高三离我还太远, 怎么用经纬网确定位置 以“心中的太阳”话题的作文以“心中的太阳”为话题,结合社会生活的作文.600字. 有时候一丝微笑一句叮嘱一个眼神会让我们生活充满了温暖与阳光作文300字 以挑战自己为话题的作文 如何用经纬网确定位置 急求一篇“微笑是阳光”或者其他生活或工作中积极向上的文章上头交代要代表公司交出一篇文章,说不限题材不限范围,这可为难了,现在比较懒了,平时没怎么看书,真是想破脑袋硬是一点灵 两个自我为话题的作文 考点同步解读 高中区域地理知识图块1 经纬网的答案在线等,累死我了 就是那一个(眼神、微笑) 作文求啦.还可以写 忘不了那(一双手、一辆自行车、一次谈话 ) 800字以上的记叙文 急呢度回. 找以“完善自我”为话题的作文 教师资格证说课还要交教案还是说课稿? 这样作文怎么写?要求是这样的:生命中有许多“阳光”值得我们收藏,也许是一个关怀的眼神,灿烂的微笑...这样作文怎么写?要求是这样的:生命中有许多“阳光”值得我们收藏,也许是一个 1.什么是锋面雨,对流雨,地形雨?2.北极,南极的极昼和极夜分别在哪些月份出现? 急求色彩构成课件或者教案 在线等只要是色构的都行··· 啄木鸟一天能吃645只害虫 青蛙12天能吃936只害虫啄木鸟平均每天比青蛙多吃多少只害虫 以欣赏自己为话题的作文要构思不要作文吗,最好举几个例子 有关《再见了亲人》的课件和教案要求课件教案一致 《校外的课堂》作文 ( 写什么生活中的事情呢,我从中学到了什么?) 6.6日17:30以前哦~ 题目是这样的:以赤道某点为出发点向北走一千米,再向东走一千米,再向南走一千米,最后再向西走一千米.请问现在所在的位置是出发点的( )A:正东 B正西 C 与出发点重合我个人觉得应该是 长方形绿地的宽要增加到36米,长不变,扩大后的绿地面积是多少? 介绍课堂的作文怎么写 初中所有地理知识 一般情况是先写教案还是先做课件恰当一点? 《向着阳光微笑》500~600作文 请问:多媒体CAI课件包含PPT吗?谁能帮我制作一份初中物理CAI课件急用? 请问这个图什么写作文 为了写老师微笑的作文女老师是阳光般男老师是什么样的微笑 ppt课件初中物理课件测小灯泡的电阻 用一张照片写作文 青蛙7天吃532只害虫,啄木鸟每天能吃684害虫,啄木鸟每天吃害虫的只数是青蛙的多少倍? 我想问: 观察着了画今写作文 急需几篇关于生日的作文 600字 楼梯斜线怎么计算?我是搞施工的,刚刚半年,学了不少东西,唯独楼梯斜线的放样到现在仍然一知半解,这个我知道,可图纸给出的尺寸都是加了做法以后的,我们要放的是没加做法的,做法的厚度 一颗小草因泥土的滋润才得以成长后面,写排比句,主要环绕“成长”的话题 求初一上学期气候类型地理知识同上,复习提纲 楼梯斜跑的长度怎么算 一张照片怎样写作文 作文 由课堂实录想到的 来提供一些思路今天开班会 老师把教室里监控录像放开给我们看 同学们的小动作多 有一个传纸条的集中力不够 懒懒散散 要写作文 有课堂实录想到的 谁可以给我一 仿写句子.1.一本你喜爱的书就像一位朋友._________,就像____________________________.2.生活中能给我们许多启示:滴水可以穿石,是在告诉我们做事应持之以恒._________,是在告诉我们______________________.3. 有谁能告诉我有哪些作文的好的开头和好的结尾,或题记、?越多越好,万分感谢、 啄木鸟每天至少吃多少害虫? 入射光线与平面镜的夹角是40°,入射光线与反射光线的夹角是多少,如果入射角减小50°,反射角是多少 以竞争为话题的作文题记,开头,结尾我想写关于与同学学习中竞争,相互提高的作文 低碳生活作文开头咋写,有急用,虽然悬赏少了点,可是,.无奈, 请大家帮忙,整理出初中地理知识归纳 题记作文开头和结尾 开头和结尾要是相连的然后题记! 低碳生活作文的开头怎么写好 求以气候,环境,地形地势,穿着等等方面对这张图片作分析,分析出这张照片的拍摄地区或地点. 作文开头题记结尾是什么 低碳生活 绿色沈城作文开头 5.5米高的楼,安一个四十五度的楼梯,求楼梯长度,3Q 关于摩擦力的课件
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘