?? 87.htm
字號:
<p>用VB編寫小型的網(wǎng)絡(luò)系統(tǒng)</p>
<p> </p>
<p></p>
<p>---- Visual Basic 以 下 簡 稱(VB) 十 一 個 功 能 強 大 的 編 程 語 言。 特 別 是4.0 以 后, 支 持 了OLE Automation 技 術(shù), 給 編 程 帶 來 了 更 大 的 方 便。 前 些 時, 我 試 著 編 寫 一 個 支 持 網(wǎng) 絡(luò) 的 數(shù) 據(jù) 庫。 但 是 由 于 沒 有 聯(lián) 網(wǎng), 所 以 沒 法 測 試。 于 是, 我 想 到 了OLE Automation, 用 它 就 可 以 在 一 臺 機 器 上 測 試 網(wǎng) 絡(luò) 功 能。 經(jīng) 過 改 動, 還 可 以 用 它 通 過Modem 來 進 行 聯(lián) 機。 下 面, 我 介 紹 一 下 如 何 用Visual Basic 編 寫 小 型 的 網(wǎng) 絡(luò) 系 統(tǒng)。 </p>
<p></p>
<p>---- 首 先, 建 立 一 個 支 持 網(wǎng) 絡(luò)OLE Automation </p>
<p></p>
<p>---- 啟 動VB。 在 窗 體Form1 中 建 立 一 個 列 表 框List 1, 在 它 上 面 建 一 個Frame1, 設(shè) 置 它 的Caption 屬 性 為 空。 在 它 中 間 建 立 一 個Label1, 同 樣, 設(shè) 置 它 的Caption 也 為 空。 最 后, 在List1 上 建 立 一 個Caption 為UserList 的Label2。 最 后, 把 一 個 定 時 器Timer1 安 上, 把 它 的Interval 設(shè) 為3000,Enabled 設(shè) 為False 就 行 了。 至 此,NetWorkConnection 的 窗 體 部 分 就 完 成 了。</p>
<p></p>
<p>---- 隨 后, 在VB 的Tools 菜 單 中 選Options, 按 照 填 好 各 項 內(nèi) 容。 </p>
<p></p>
<p>---- 接 下 來, 在Insert 菜 單 中 選 取Module 建 立 一 個 新 的 模 塊Module1。 在(General) 中 輸 入 填 寫 進 下 列 代 碼。 </p>
<p></p>
<p>(UserInfo數(shù)據(jù)類型)</p>
<p>Type UserInfo</p>
<p>Username As String</p>
<p>Alias As Integer </p>
<p>End Type</p>
<p>(最大的用戶數(shù))</p>
<p>Public Const MaxUser = 10</p>
<p>(定義消息)</p>
<p>Public Const Msg_User_LogOn = 1</p>
<p>Public Const Msg_User_LogOff = 2</p>
<p>(設(shè)定數(shù)據(jù)類型)</p>
<p>Public Users (MaxUser) As UserInfo</p>
<p>Public Inbox (MaxUser) As String</p>
<p>Public UserSystemInbox As Integer</p>
<p>Public Online(MaxUser) As Boolean</p>
<p></p>
<p>Sub main()</p>
<p>Form1.Show</p>
<p>End Sub</p>
<p></p>
<p>---- UserInfo 數(shù) 據(jù) 類 型 記 錄 了 已 經(jīng) 登 錄 的 用 戶 的 用 戶 名 和 別 名。 在 顯 示 和 通 訊 時 只 使 用 別 名。 用 戶 名 只 作 為 判 斷 用 戶 是 否 有 效 時 用。 出 于 安 全 考 慮, 以 上 數(shù) 據(jù) 用 戶 不 能 隨 意 訪 問, 必 須 通 過 下 面 的 子 程 序 來 訪 問。 </p>
<p></p>
<p>---- 在Insert 菜 單 中 選 取Class Module 建 立 一 個 新 的 類Class1。 更 名 為Common, 并 設(shè) 置 它 的 各 個 屬 性。 </p>
<p></p>
<p>---- 填 寫 進 下 列 代 碼。 </p>
<p></p>
<p>---- ( 提 供 獲 取 用 戶ID 值 的 功 能, 用 戶 可 以 通 過 此 功 能 使 用 別 名 來 返 回ID 值) </p>
<p></p>
<p>Public Function GetUserID(Alias As String) As Integer</p>
<p>For i = 1 To MaxUser</p>
<p>If Users(i).Alias = Alias Then GetUserID = i</p>
<p>Next i</p>
<p>End Function</p>
<p></p>
<p>---- ( 提 供 獲 得 系 統(tǒng) 信 息 的 功 能。 用 戶 可 以 通 過 它 了 解 用 戶 是 否 有 改 動) </p>
<p></p>
<p>Public Function GetSystemMessage() As Integer</p>
<p>GetSystemMessage = UserSystemInbox</p>
<p>End Function</p>
<p></p>
<p>---- ( 提 供 獲 得 用 戶 信 息 的 功 能。 用 它 來 獲 取 所 有 在 線 </p>
<p>用 戶 的 別 名, 中 間 用"|" 分 開。) </p>
<p></p>
<p>Public Function GetUserInfo() As String</p>
<p>For i = 1 To MaxUser</p>
<p>If Users(i).Username < > "" Then</p>
<p>temp = temp + Users(i).Alias + "|"</p>
<p>End If</p>
<p>Next i</p>
<p>GetUserInfo = temp</p>
<p>End Function</p>
<p></p>
<p>---- ( 提 供 獲 得 用 戶 私 有 信 息 的 功 能。 用 來 接 受 別 的 用 </p>
<p>戶 發(fā) 送 的 信 息。) </p>
<p></p>
<p>Public Function GetUserMessage(ID As Integer) As String</p>
<p>If ID < = 0 Or ID > MaxUser Then</p>
<p>Exit Function</p>
<p>End If</p>
<p>GetUserMessage = Inbox(ID)</p>
<p>End Function</p>
<p></p>
<p>---- ( 提 供 注 銷 功 能。 用 來 退 出 網(wǎng) 絡(luò)。) </p>
<p></p>
<p>Public Function LogOff(ID As Integer) As Boolean</p>
<p>If ID < = 0 Or ID > MaxUser Then</p>
<p>LogOff = False</p>
<p>Exit Function</p>
<p>End If</p>
<p>If Users(ID).Username < > "" Then</p>
<p>Users(ID).Username = ""</p>
<p>LogOff = True</p>
<p>Else</p>
<p>LogOff = False</p>
<p>End If</p>
<p>UserSystemInbox = Msg_User_LogOff</p>
<p>`-------------- Update Form1 ------------</p>
<p>For i = 0 To Form1.List1.ListCount - 1</p>
<p>If Form1.List1.List(i) = Users(ID).Alias Then </p>
<p>`查找List1中的用戶別名并刪除</p>
<p>Form1.List1.RemoveItem i</p>
<p>Exit For</p>
<p>End If</p>
<p>Next i</p>
<p>If Form1.List1.ListCount = 0 Then `如果沒有用戶登錄</p>
<p>Form1.Label1.Caption = "DisConnected"</p>
<p>Form1.timer1.Enabled = False</p>
<p>End If</p>
<p>End Function</p>
<p></p>
<p>---- ( 提 供 登 錄 功 能 來 上 網(wǎng)) </p>
<p></p>
<p>Public Function LogOn(Username As String,</p>
<p>Alias As String) As Integer</p>
<p>For i = 1 To MaxUser</p>
<p>If Users(i).Username = "" Then</p>
<p>Users(i).Username = Username</p>
<p>Users(i).Alias = Alias</p>
<p>LogOn = i</p>
<p>UserSystemInbox = Msg_User_LogOn `發(fā)送"用戶登錄"信息</p>
<p>`-------------- Update Form1 ------------</p>
<p>Form1.List1.AddItem Alias `有用戶上網(wǎng)</p>
<p>Form1.Label1.Caption = "Connected"</p>
<p>Form1.timer1.Enabled = True</p>
<p>Exit Function</p>
<p>End If</p>
<p>Next i</p>
<p>LogOn = 0</p>
<p>End Function</p>
<p></p>
<p>---- ( 提 供 刷 新 用 戶 是 否 在 線 標 志 的 功 能。 使 系 統(tǒng) 能 夠 </p>
<p>判 斷 你 是 否 在 線 上, 如 果 在6 秒 內(nèi) 沒 有 調(diào) 用 此 功 能, 系 </p>
<p>統(tǒng) 將 會 把 您 自 動 刪 除。) </p>
<p></p>
<p>Public Sub Refresh(ID As Integer)</p>
<p>If ID < = 0 Or ID > MaxUser Then Exit Sub</p>
<p>Online(ID) = True</p>
<p>End Sub</p>
<p></p>
<p>---- ( 提 供 發(fā) 送 用 戶 私 有 信 息 的 功 能。 用 來 和 其 它 用 戶傳 遞 信 息。) </p>
<p></p>
<p>Public Function SendUserMessage(Message As </p>
<p>String, ToID As Integer) As Boolean</p>
<p>If ToID < = 0 Or ToID > MaxUser Then</p>
<p>SendUserMessage = False</p>
<p>Exit Function</p>
<p>End If</p>
<p>Inbox(ToID) = Message</p>
<p>SendUserMessage = True</p>
<p>End Function</p>
<p></p>
<p>---- 在Form1 的Code 中 輸 入 剩 下 的 代 碼。 </p>
<p></p>
<p>(初始化Form1)</p>
<p>Private Sub Form_Load()</p>
<p>Label1.Caption = "DisConnected"</p>
<p>Form1.Caption = "NetWork Connected Server"</p>
<p>Form1.Show</p>
<p>For i = 1 To MaxUser</p>
<p>Users(i).Username = ""</p>
<p>Next i</p>
<p>End Sub</p>
<p></p>
<p>---- ( 通 過 判 斷Online 的 值 定 時 檢 查 用 戶 是 否 在 線) </p>
<p></p>
<p>Private Sub timer1_Timer()</p>
<p>For i = 1 To MaxUser</p>
<p>If Users(i).Username < > "" Then</p>
<p>If Online(i) = False Then</p>
<p>For s = 0 To List1.ListCount - 1</p>
<p>If List1.List(s) = Users(i).Alias Then</p>
<p>List1.RemoveItem s</p>
<p>Users(i).Username = ""</p>
<p>UserSystemInbox = Msg_User_LogOff</p>
<p>` 發(fā) 送" 用 戶 注 銷" 信 息</p>
<p>End If</p>
<p>Next s</p>
<p>End If</p>
<p>Online(i) = False</p>
<p>End If</p>
<p>Next i</p>
<p>If List1.ListCount = 0 Then</p>
<p>` 如 果 沒 有 用 戶</p>
<p>Label1.Caption = "DisConnected"</p>
<p>timer1.Enabled = False</p>
<p>End If</p>
<p>End Sub</p>
<p></p>
<p>---- 運 行 此 程 序。 在 啟 動 另 一 個VB, 開 始 編 寫 用 戶 部 分。 </p>
<p>在 默 認 窗 體 中 按 下 圖 排 好 這 些 控 件。 </p>
<p></p>
<p>---- 填 入 下 列 代 碼 </p>
<p></p>
<p>Public ID As Integer</p>
<p>Public Connected As Object</p>
<p>Private Sub Command1_Click() `登錄</p>
<p>Dim username As String</p>
<p>Dim alias As String</p>
<p>Set Connected = CreateObject</p>
<p>("NetWorkConnection.Common") 啟 動NetWorkConnection</p>
<p>username = Text1.Text</p>
<p>alias = Text2.Text</p>
<p>ID = Connected.logon(username, alias) `登錄并返回ID值</p>
<p>Timer1.Enabled = True</p>
<p>Command4_Click</p>
<p>End Sub</p>
<p></p>
<p></p>
<p>Private Sub Command2_Click() `注銷</p>
<p>x = Connected.logoff(ID)</p>
<p>Timer1.Enabled = False</p>
<p>Set x = Nothing `釋放對象</p>
<p>End Sub</p>
<p></p>
<p>Private Sub Command3_Click() `發(fā)送用戶信息</p>
<p>Dim TempID As Integer</p>
<p>Dim TempString As String</p>
<p>Dim x As String</p>
<p>Dim y As Boolean</p>
<p>x = Combo1.Text</p>
<p>TempID = Connected.getuserid(x) `獲得指定用戶的ID值</p>
<p>TempString = Text3.Text</p>
<p>y = Connected.sendusermessage(TempString, TempID)</p>
<p>End Sub</p>
<p></p>
<p>Private Sub Command4_Click()</p>
<p>For i = 0 To Combo1.ListCount 1 `清空Combo1</p>
<p>Combo1.RemoveItem 0</p>
<p>Next i</p>
<p></p>
<p>x = Connected.GetUserInfo `接收用戶信息</p>
<p>cd$ = x</p>
<p>lastst = 1</p>
<p>For i = 1 To Len(cd$)</p>
<p>If Mid$(cd$, i, 1) = "|" Then</p>
<p>Namef$ = Mid$(cd$, lastst, i - lastst)</p>
<p>Combo1.AddItem Namef$ `分離用戶別名并加入Combo1</p>
<p>lastst = i + 1</p>
<p>End If</p>
<p>Next i</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>Private Sub Form_Load()</p>
<p>Timer1.Enabled = False</p>
<p>Timer1.Interval = 300</p>
<p>End Sub</p>
<p></p>
<p>Private Sub Timer1_Timer()</p>
<p>Connected.Refresh (ID) `刷新用戶標志</p>
<p>x = Connected.GetSystemMessage() `接收系統(tǒng)信息</p>
<p>y = Connected.GetUserMessage(ID) `接收用戶信息</p>
<p>If y < > "" And y < > Label6.Caption Then Label6.Caption = y</p>
<p>If x < > Val(Label4.Caption) Then `刷新Combo1</p>
<p>Label4.Caption = x</p>
<p>Command4_Click</p>
<p>End If</p>
<p>End Sub</p>
<p></p>
<p>---- 開 始 運 行。 輸 入 你 的Username 和Alias, 單 擊LogOn, 查 看 一 下 先 前 的VB 范 例, 看 看 你 的 名 字 是 否 在 內(nèi)。 如 果 是, 證 明 你 的" 集 線 器" 成 功 了。 這 時, 不 管 已 登 錄 的 用 戶 處 于 什 么 原 因 沒 有 用 LogOff 就 中 斷 聯(lián) 系, 系 統(tǒng) 都 會 在6 秒 后 自 動 刪 除 這 些 用 戶。 確 保 其 它 用 戶 不 受 影 響。 </p>
<p>---- 這 個 程 序 經(jīng) 過 改 動, 可 以 給 它 支 持Modem 的 功 能。 而 用 戶 部 分 的 程 序 可 以 原 封 不 動。 編 譯 時 在Options 中 選 中Remote Support File 并 利 用 附 帶 的 安 裝 程 序 安 裝 到 網(wǎng) 絡(luò) 服 務 器 上 就 可 以 真 正 實 現(xiàn)" 聯(lián) 網(wǎng)" 了。</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -