【正文】
服務器代碼如下 : Winsock1(0).LocalPort = 19。 代碼結(jié)構(gòu)如下 : Private Sub WskclientDataArrival(ByVal bytesTotal AsLong) ’消息到達時接收 Dim ClientData As String Dim tou As Integer 39。 服務器可以把系統(tǒng)管理員發(fā)的消息及其它客戶登錄、退出、對話的信息分別傳遞給傳給客戶端。 客戶端: 發(fā)送連接,是靠服務器回復的標志變量,來判別連接狀態(tài)的。接收 ReDim Preserve nowconnext(maxconnext + 1) nowconnext(maxconnext) = True End If End If End Sub 因為客戶端發(fā)送的每一個請求,都有個頭命令,服務器端根據(jù)這個頭命令來分辨客戶端的請求類型。當前接收端口增加 Load Winsock1(maxconnext) 39。Winsock( i)被占用 Else 39。使用現(xiàn)成的 Socket Winsock1(I).Accept requestID 39。在以前的 Winsock 中找到空閑的Winsock I = I + 1 DoEvents Wend If I = maxconnext Then 39。 Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) On Error Resume Next Dim I As Long If Index = 0 Then 39。 注冊窗口和個人信息窗口的界面如圖 617 和圖 618: 圖 注冊窗口 長沙學院 畢業(yè)設(shè)計 (論文 ) 30 圖 底層通訊設(shè)計 服務器端: 為了使能及時響應多個用戶 的請求,我對 winsock 控件添加了數(shù)組,也就是說,在連接上一個用戶后,自動增加一個 winsock 控件進行偵聽。 vbCrLf Form_Load End Sub 點擊登陸后會顯示以下登陸窗口,用戶 ID 六位數(shù)后自動轉(zhuǎn)到密碼欄,回車即完成登陸操作。 Text2 Text2 = End If 長沙學院 畢業(yè)設(shè)計 (論文 ) 27 End Sub Private Sub geren_Click() formactive = False = id If sckConnected Then (0) = False (2) = False = 1 Else 04| amp。 Mid(( 1), 1, 3) amp。sl If = True Then = True End If End Sub Private Sub sendmsg_click() If sckConnected Then MsgBox 你還沒登陸 !, vbOKOnly + 64, 提示 ein_Click Exit Sub End If If Then 03| amp。 Left(Right(, 7), 6) = True (1) = False (2) = False 長沙學院 畢業(yè)設(shè)計 (論文 ) 26 = False End If End Sub Private Sub Option1_Click() 39。右邊列表顯示在線名單,雙擊列表可以顯示個人資料,由群聊轉(zhuǎn)為私聊后,可以選擇選定的目標進行一對一的悄悄話。 vbCrLf 發(fā)布通知的 界面圖如圖 : 圖 發(fā)放通知界面圖 客戶界面 客戶機用 Winsock 控件發(fā)出信息,服務器端通過信息頭的標識分辨客戶端的要求,比如登陸、注冊、注銷、發(fā)送信息,另外客戶端還有標簽欄接收服務器發(fā)來的系統(tǒng)通告。 通知大家 : amp。 amp。 SaveSetting 即時通訊軟件服務器 , tongz, tongz, tongz For I = 1 To maxconnext If Winsock1(I).State = sckConnected Then Winsock1(I).SendData 12| amp。 vbCrLf amp。通知的內(nèi)容存放在tongz = GetSetting(即時通訊軟件服務器 , tongz, tongz),其中 tongz 鍵值位置在 HKEY_CURRENT_USER\Software\VB and VBA Program Settings\即時通訊軟件服務器 \server。 密碼驗證時用到的部分代碼: na = GetSetting(即時通訊軟件服務器 , server, name) pw = GetSetting(即時通訊軟件服務器 , server, password) 改新密碼時用到的部分代碼: SaveSetting 即時通訊軟件服務器 , server, name, Text3 長沙學院 畢業(yè)設(shè)計 (論文 ) 24 SaveSetting 即時通訊軟件服務器 , server, password, Text4 管理員帳號和密碼都存在本機注冊表,初始賬戶和密碼都為空。 str DoEvents Loop Close 1 If t = Then Text1 = 這一天沒 有任何聊天信息 Else Text1 = t Exit Sub 30: Close 1 Text1 = 這一天的聊天信息不存在,或文件已丟失 End Sub 在選擇日期的界面點擊任意的一天,會在 顯示選中的日期。 amp。 \data\ amp。 .txt For Input As 1 Do Until EOF(1) Input 1, str t = t amp。 amp。 選擇日期的界面在類模塊已經(jīng)定義了 Dim Calendar As Class1 長沙學院 畢業(yè)設(shè)計 (論文 ) 21 關(guān)鍵代碼如下: Private Sub Command1_Click() c1 = Not c1 If c1 Then Else End If End Sub Private Sub Command2_Click() On Error GoTo 30 Dim t, str As String c1 = False Open amp。 vbCrLf 保存記錄以及查看記錄 對于保存的聊天和日志信息,服務器必須能夠很方便的顯示出任意一天的信息,實現(xiàn)快速查看。 CStr(maxconnext) amp。 人 amp。 vbCrLf = 當前 amp。 (1).Text amp。 vbCrLf = (3).Text amp。 formtime amp。 (0).LocalIP amp。 \ CopyFile strSource, strDestination, False MsgBox 本地數(shù)據(jù)庫已被成功恢復! , vbInformation + vbOKOnly, 系統(tǒng)提示 End If End Sub 對話框如圖 69 和 610: 圖 圖 長沙學院 畢業(yè)設(shè)計 (論文 ) 20 查看服務器信息 作為服務器需要對服務器本身運行的信息有準確的掌握,而且還記錄用戶注冊和登陸的信息。 備份數(shù)據(jù)庫嗎? , vbExclamation + vbYesNo, 警告 ) If I vbYes Then Exit Sub Else strSource = amp。 Fen amp。 Shi amp。 Ri amp。 Yue amp。 Nian amp。 \bat\*.mdb, vbNormal + vbDirectory) If FileNames = Then MsgBox 找不到備份文件,請重新備份?。?, vbInformation + vbOKOnly, 系統(tǒng)提示 Exit Sub End If Dim a As Long Dim str_tem As String str_tem = Space$(20) 長沙學院 畢業(yè)設(shè)計 (論文 ) 19 a = GetPrivateProfileString(DataSet, SID, , str_tem, 20, amp。 \ strDestination = amp。 \ I = MsgBox(您確定要備份本地數(shù)據(jù)庫嗎? , vbExclamation + vbYesNo, 警告 ) If I vbYes Then 39。實現(xiàn)方法是把現(xiàn)有的數(shù)據(jù)庫文件放入備份的文件夾里,還原的時候再將其覆蓋替換當前的數(shù)據(jù)庫文件。 \qk\ strDestination = amp。 \qk\*.mdb, vbNormal + vbDirectory) 39。登陸界面和登陸流程圖如下: 圖 長沙學院 畢業(yè)設(shè)計 (論文 ) 15 圖 登陸流程圖 數(shù)據(jù)初始化模塊 數(shù)據(jù)庫 需要初始化的功能,實現(xiàn)清空數(shù)據(jù)庫的功能,實現(xiàn)的方法就是用原始的數(shù)據(jù)庫文件覆蓋替換現(xiàn)有的數(shù)據(jù)庫文件。列表的詳細內(nèi)容如下: 長沙學院 畢業(yè)設(shè)計 (論文 ) 14 表 注冊信息表 列名 數(shù)據(jù)類型 說明 ID TEXT 序號 用戶名 TEXT 聊天人員的用戶名 密碼 TEXT 密碼 性別 TEXT 聊天人員性別 年齡 TEXT 年齡 個人說明 TEXT 個人說明 表 登陸信息表 列名 數(shù)據(jù)類型 說明 ID TEXT 序號 用戶名 TEXT 用戶名 密碼 TEXT 密碼 上線時間 TEXT 上線時間 IP TEXT IP 遠程端口 TEXT 遠程端口 計算機名稱 TEXT 計算機名稱 各主要窗體及核心代碼介紹 密碼模塊 為了提高軟件操作安全性,進入系統(tǒng)前,需要進行身份驗證,通過此窗口輸入個人信息以驗證身份。它的繪制依據(jù)是現(xiàn)行系統(tǒng)流程圖,數(shù)據(jù)流程圖是 管理信息系統(tǒng)的總體設(shè)計圖 [12]。在一個工作組級別的網(wǎng)絡環(huán)境中,使用 Access開發(fā)的多用戶數(shù)據(jù)庫管理系統(tǒng)具有傳統(tǒng)的 XBASE 數(shù)據(jù)庫系統(tǒng)所無法比擬的客戶服( Client/Server)結(jié)構(gòu)和相應的數(shù)據(jù)庫安全機制。作為一種功能強大的 MIS 系統(tǒng)開發(fā)工具,它具有界面友好,易學易用,開發(fā)簡單,接口靈活等特點,是一個典型的新一代數(shù)據(jù)管理和信息系統(tǒng)開發(fā)工具。決定采用 ACCESS 數(shù)據(jù)庫保存用戶的基本信息。當接收到數(shù)據(jù)時,會發(fā)生 DataArrival 事件,調(diào)用 DataArrival 事件中的 GetData 方法就可以獲得對方傳送的數(shù)據(jù) [11]。建立連接后 ,任何一方計算機都可以發(fā)送、接收對方數(shù)據(jù)。當客戶機需要連接時( connect),就會發(fā)生 ConnectionRequest 事件。在創(chuàng)建客戶應用程序時,必須知道服務器名或其 IP 地址( RemoteHost 屬性)及服務器進行偵聽的端口( RemotePort 屬性) ,然后調(diào)用 Connect 方法。 TCP 協(xié)議即數(shù)據(jù)傳輸協(xié)議,允許創(chuàng)建和維護與遠程計算機的連接,使彼此 可以進行數(shù)據(jù)傳輸。使用 TCP 協(xié)議來實現(xiàn)服務器 N 客戶模式。 Winsock 是不可見控件 ,控件文件名是 ,全稱為 Microsoft Winsock Control,它能實現(xiàn)機器與機器間點對點的連接以及對話,使用時要將此控件調(diào)入工具箱。在整個系統(tǒng)設(shè)計過程中,對客戶端和服務器端的消息到達這一事件的設(shè)計和編碼是系統(tǒng)的關(guān)鍵。由于服務器要和多個客戶聯(lián)系,所以在設(shè)計中采用了 Winsock 控件數(shù)組的形式,其中下標為 0 的元素作為監(jiān)聽控件,當有客戶登錄、退出或者相互間發(fā)送消息時,能正確接收并作相應處理,其余控件數(shù)組元素當有客戶連接時自動裝入。 圖 原型法工作流程圖 長沙學院 畢業(yè)設(shè)計 (論文 ) 11 第 5 章 總體設(shè)計 設(shè)計思想 服務器端和客戶端需要分別設(shè)計,除了主聊天界面外,還加上了登錄界面,以便管理。對應于原型的工作模型可以進行必要的剪裁和組織,以便更接近目標系統(tǒng)。 原型法的生命周期提供了一種完整的、靈活的、近于動態(tài)的需求定義技術(shù)。 ( 5) 原型效果考察。 長沙學院 畢業(yè)設(shè)計 (論文 ) 10 ( 3) 對初始原型進行需求迭代,不斷進行修正或改進,直至得到一個用戶滿意的原型,從而終止原型迭代過程。 ( 2) 設(shè)計初始原型。