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

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

Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具 Anchora鲁为民:PaaS是我的兴趣 次世代IDE Light Table 0.4发布 带来众多更新和改进 别再设计易碎的Web API! LinkedIn:55人支持2700位员工,2亿用户的大数据分析 Brian Krzanich是谁?这位新CEO预示英特尔未来怎样? HTML5开发者心声:浏览器兼容性成最大问题 传微软6月下旬将发布第二代Surface 7到9英寸全有 Turbulenz:HTML5 2D和3D游戏引擎开源 携程开放平台总经理夏天:内容+高转化率成就开发者 直接拿来用!最火的Android开源项目(一) Qunar 谌振宇:旅游行业的移动化如何布局? 大数据分析“铁三角”: Teradata数据仓库、Teradata Aster与Hadoop Teradata专业服务:打造行业企业的“数据科学家” Xamarin Evolve 2013:竭尽全力让C#服务iOS与Android 史上最全!57个Web框架4轮横向对比 回顾银行数据的可用性和一致性历史 Qubole:托管在AWS平台上的Hive服务 自由操作系统 Debian 正式发布7.0版本 4月份浏览器份额:IE 8仍居第一,IE 10翻番 亚马逊正式在华推Android应用商店 收入3:7分账 不要男孩,只允许女生参加的四所编程学校 下一波App机会在哪里? JS1K 2013优胜作品公布 3D蜜蜂仅获亚军 专访:前新浪网架构师徐佳转行卖水果背后的故事 FBI密码挑战,你能解开吗? 从0到1只需一天:Twitter后PC时代物联网“敏捷”开发之路的探索 机械生物已经面世 只少个“大脑”而已 百度正式宣布3.7亿美元收购PPS视频业务 比尔&#183;盖茨:iPad让人失望 用户需要Surface Dropbox将于今年夏天举办有史以来的第一场开发者大会 这样做到不刷新,获取application的变化? 请教状态栏的问题 vfp问题?急~(关于控件的使用) 破解bios开机密码 如何自己编写代码结束所有的应用程序呢?请教! 请问如何在C#中对字符串或byte[]进行crc32校验。有现成的调用吗? 菜鸟的一个有关数据库的疑问?有谁知道吗? 神啊,救救我吧! 神啊,救救我吧! 神啊,救救我吧! 菜鸟提问,如何知道MDB数据库中是否存在一个指定表,谢谢!急…… 关于用DBGRID向数据库添加主细表的问题?高分奖赏! 关于窗体菜单的问题? 很急!!!!!!!! 欢迎大家推荐好的学习JSP的网站! 数据库 vfp->sql server? 问一个最好的查漏方法 ARM Develop Suite eval version的破解方法或者破解文件 一个word文件,怎么让用户一打开它时 出现保存对话框? ie6.0的快捷键问题 这里人气旺,借贵宝地一用。熟悉网站搜索引擎的朋友请进! 交换机和路由器有什么区别?? csdn怎么回事啊!!昨天登陆后竟然显示别人的用户名,今天竟然连我的注册信息也改了.TMD 关于SQL SERVERS2000 建数据库的问题--请进 请问哪有讲算法的好书啊! 关于单片机??? 向各位大侠请教:怎样在JAVE中调用文件 SYBASE 数据库设备删除后 Vitual Device Number 不能释放? 高分诱惑(痛苦莫过于分太多) RichEdit中的COM问题!!! 各位师兄师姐,帮帮我,好吗? 一个图形文件,如一个JPG图形文件,怎么才能通过流读进来,然后转化成一个字节数组。 关于Activeform中INF文件的问题。(解决问题者有分) 我不算是ASP的学习者,但想请教个问题,一小段ASP代码 请推荐国外(or 国内)优秀的编程网站,for delphi 或vc等等 请指教:关于管理软件权限制作方面的问题 求救:关于从XML文档中抽取文本的方法!!! 怎样读取系统时间,日期?急! 请推荐一两本shell编程方面的好书。UNIX,LINUX不论。 ~◎大虾们,在linux下怎么得到一个进程的cpu mem的使用情况,用从c/c++程序! 我想学JAVA,请问如何开始阿。 键盘有一power键,按下就会关机,怎样编程使按下该键时不执行关机动作? 请问如何控制SourceSafe的物理权限 ? 各位兄弟,有谁知道在网上哪有SQL SEVER2000的教材下载,谢谢! 图片上传到服务器的一个固定文件夹里的程序怎么写??? 两个小问题! 各位兄弟,有谁知道在网上哪有SQL SEVER2000的教材下载,谢谢! ActiveX,在哪里找到它? 请教高手,关于c run-time library 的详解. 链接库为何链接不上??已经忙了2天了,求助 求助:关于数据与显示的问题 概括海底奇光就是主要内容, 变色龙为什么会变色,有什么作用 珍爱生命 远离危险水域正文 海底奇光以“校园的一角”为题300字左右要描写出具体的形象 初中必写的议论文 请围绕"时间过得真快’写一个排比句. 1.海底奇光”奇“在————.2.海底奇光的收获和体会. 秦兵马俑的课文中的排比句再仿写两句 请围绕"时间过的真快"写一个排比句 令我感动的一件事作文150字,我11岁,要符合实际的 书中的故事作文450字 第20课《真理诞生于一百个问号之后》课后题目与答案题目和答案都要最后的小练笔不要 小学人教版第十册有多少篇课文? 形容草原美景的词 请把《两小儿辩日》这篇文言文翻译一遍 人生之道是什么? 英语翻译是古文,要翻译 文言文,两小儿辩日翻译 我想对革命英雄说 找一篇关于【歌颂老师】或【我的母亲】的作文600字左右加急速度的加30积分 英语翻译请简要说明其中的科学道理! 1949年~1969年的中国革命英雄马宝玉、胡德林、胡福葛振林、宋学义 翻译 文言文 世说新语 《杨氏之子》 这样妙在哪里急需! 桑娜脸色苍白 神情激动 她忐忑不安地想 他会说什么呢 这是闹着玩的吗 自己的五个孩子已经够他受的了是他来啦 不 还没来 为什么把他们抱过来啊 他还揍我的 那也活该 我自作自受 嗯 揍我 革命英雄 英语翻译梁国杨氏子九岁,甚聪慧.孔君平诣其父,父不在,乃呼儿出.为设果,果有杨梅.孔指果以示儿曰:“此是君家果.”儿应声答曰:“未闻孔雀是父子家禽.”那么请问儿子聪明在哪?父子家 她脸色苍白,神情激动,她忐忑不安地想(这一段是什么描写) 有关革命英雄的电影 古文 的译文是什么 桑娜抱回孩子为什么会忐忑不安 英语翻译《小松》:自小刺头深草里……帮我翻译成白话文! 古文 的译文是什么啊,紧急! 我是一名初中生,我要怎么提高自己的写作水平和阅读能力还有理解能力,议论文的结构是什么? 关于尝试的议论文700~800字 桑娜脸色苍白,神情激动.她忐忑不安地想:“他会说什么呢?这是闹着玩的吗?自己的五个孩子已经够他受的了..不,还没来!.为什么把他们抱过来啊?.他会揍我的!那也活该,我自作自受.嗯,揍我一 杨氏之子试着翻译文言文 文言文 学弈和两小儿辩日的重点句还有 悟道理、 桑娜为什么会说揍我一顿也好 桑娜脸色苍白,神情激动.她忐忑不安地想:“他会说什么呢?这是闹着玩的吗?自己的五个孩子已经够他受的了..不,还没来!.为什么把他们抱过来啊?.他会揍我的!那也活该,我自作自受.嗯,揍我一 用英文简介 《麦田的守望者》 的内容 , 不可尽信书中所言(议论文).600字,2篇 桑娜脸色苍白,神情 请问谁知道〈麦田的守望者〉的英文名字是什么? 文言文《学弈》《两小儿辩日》分别选自哪里? 汤姆·索亚历险记读后感 急、、、、、、、、、知道的快点回答.我要写作文、 英语翻译People never notice anything. 小练笔 1 文言文两则《学弈》《两小儿辩日》 150字左右联系生活实际,你能从这两个小故事中悟出什么道理?选择一个把你的感悟写下来.(150字左右) 人们为什么把“避役”叫“变色龙” 雷锋的精神有关文章 对易中天 于丹热 这一现象的看法急... 写作文《家乡畅想曲》《xxxxx读后感》的提纲,要求:自己写这些题目都是老师给的,要提纲 关于缅怀革命先烈,弘扬民族精神与清明有关的中学作文 急用 于丹 易中天大家有没有对 最近在《百家讲坛》上的这些个 学者 有利的评价呢? 大学里管排比句叫什么? 关于雷峰精神的文章 说十句感悟人生的话 我要一些关于毕业了,想念同学,想念以前的班之类的诗句(原创)要写成好像诗的形式,要自己原创的 海底奇光 中心思想 变色龙变色有什么规律?18:00之前回答 用谈笑的时候写一个排比句
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘