freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

聊天系統(tǒng)設(shè)計與實現(xiàn)本科畢業(yè)論文(參考版)

2024-08-31 23:25本頁面
  

【正文】 } else { acceptmsg(tcps, nss)。 } 山西大學(xué)商務(wù)學(xué)院本科畢業(yè)設(shè)計 28 } } //接受信息處理方法 private void acceptmsg() { if(wait != null) ()。 = client_amsg。 = true。 SetServerStatus(已經(jīng)建立連接! )。 } catch () { SetServerStatus(對方占線,請稍后再試! )。 int bytes = 0。 } //保存到讀取數(shù)據(jù)的數(shù)組 byte[] read = new byte[2]。 } catch (SocketException) { SetServerStatus(錯誤 :找不到對方,對方可能已下線! )。 tcpc = new TcpClient()。 return ip。 ()。 msg2 = null。 (msgline)。 string date = () + + ()。 (write, 0, )。 byte[] write = new byte[1024]。 string msg2 = 。 } else { sendmsg(nss)。 disconnect()。 } //else if (diares == ) else { ()。 = server_amsg。 } fileip = (readclientIP)。 try { (readclientIP, 0, )。 = true。 //改變控制變量 isconnecting = true。 byteresp = (())。 byte[] byteresp。 //DialogResult diares = (str, cmd, )。 //string str = 用戶請求連接 ,接受 ?。 endregion } region 服務(wù)器監(jiān)聽連接 private void waitconn() { tcps = ()。 endregion region if (tcpc != null) ()。 = true。 getSaveFileDelegate = new GetSaveFileDelegate(GetSaveFile)。 ()。 = true。 writemyIP = (())。 ()。 tcp1 = new TcpListener(, port)。 //()。 既然設(shè)計已經(jīng)完成,論文也寫到結(jié)論的地方,我希望自己能以一個良好的心態(tài)順利畢業(yè),走向社會。所以,我決定認真總結(jié)這次畢業(yè)設(shè)計的經(jīng)驗,以及學(xué)習(xí)到的知識,來更加的充實自己的頭腦和完善自己的知識結(jié)構(gòu)。在這次的畢業(yè)設(shè)計中,我應(yīng)用了 VC++ 開發(fā)工具在WINDOWS 平臺上開發(fā)了一個基于 WINDOWS 平臺的局域網(wǎng)通信工具,在這一重要的領(lǐng)域進行了相關(guān)的實踐,不管是對我的研究能力,還是實際動手能力,還是資料查閱能力,都起了相當(dāng)大的益處。解決的辦法就是在斷開連接的時候,向?qū)Ψ桨l(fā)送“斷開”信號,對方接收到斷開信號后,將其自身的 Socket釋放掉。 通過對這個問題的解決,掌握了 C中的使用多線程時,線程的創(chuàng)建、相互協(xié)調(diào)和銷毀等技術(shù)。 通過查閱資料,掌握了 C中在 winform關(guān)閉時需要進行的操作: 接收線程需要關(guān)閉; 監(jiān)聽需要關(guān)閉; Socket 需要 關(guān)閉; 網(wǎng)絡(luò)流需要關(guān)閉; 如果是傳文件的話還需要關(guān)閉流文件。在開發(fā)的時候,經(jīng)常因為線程的創(chuàng)建和銷毀不當(dāng),而造成程序假死或者異常退出,卻沒有釋放其占用的端口等資源。否則,在完全滿足前一個請求之前,將無法處理 其他的新的請求。 山西大學(xué)商務(wù)學(xué)院本科畢業(yè)設(shè)計 22 7. 主要問題及解決 多線程問題 因為本系統(tǒng)的客戶端程序采用 P2P模式,每個用戶即可以使服務(wù)的發(fā)起端,又可以使服務(wù)的接收端,所以必須在程序加載時對網(wǎng)絡(luò)進行監(jiān)聽,監(jiān)聽聊天連接請求和文件傳輸連接請求,并能夠?qū)悍桨l(fā)起的事件進行處理,因而必須在此應(yīng)用程序中使用多線程技術(shù),耗時的任務(wù)可以在后臺執(zhí)行,而使應(yīng)用程序窗口和控件保持響應(yīng)。本聊天工具使用過程中提示信息詳細,界面友好,操作簡單,新用戶能夠很快學(xué)會使用,所以具有比較好的易用性。 易用性測試 易用性測試沒有一個量化的指標(biāo),主觀性較強。另外,此設(shè)計中未限制傳輸文件的大小,經(jīng)測試, 5GB以上的文件也能夠通過文件傳輸模塊進行傳輸。因為對于帶寬相對較大,至少都是 10Mbps的局域網(wǎng)來說,信息的發(fā)送和接收,在局域網(wǎng)內(nèi)幾乎就是瞬間響應(yīng),造成速度瓶頸的不是網(wǎng)絡(luò)傳輸因素,而是頻繁的對磁盤設(shè)備進行讀寫所致,而傳輸過程中頻繁的計算也是造成系統(tǒng)資源消耗過大的一個原因。 文件傳輸?shù)臅r候,通過對文件長度以及已傳輸信息量的相減運算,顯示出當(dāng)前傳輸狀態(tài),需要占用較多的系統(tǒng)計算資源和時間,而且傳輸速 度相對 IPMSG等軟件,慢太多。 圖 13 用戶操作出錯信息提示示意圖 性能與效率測試 關(guān)于性能的問題,在語聊時,未對語音輸入設(shè)備采集到的信息進行編碼,緩沖數(shù)也較少,所以當(dāng)用戶所處環(huán)境較狹小時,回音將產(chǎn)生嘯叫。當(dāng)系統(tǒng)本身發(fā)生錯誤,比如網(wǎng)絡(luò)初始化失敗,綁定套接字失敗,數(shù)據(jù)讀取失敗等,都會進行相 對應(yīng)的正確處理。容錯性好的軟件能確保系統(tǒng)不發(fā)生無法意料的事故。所以,功能測試為成功。 A客戶端收到服務(wù)器發(fā)來的信息后,更新自己的用戶表,然后此時,不管 A,B雙方,只要雙擊用戶列表中相應(yīng)的項目,即可啟動發(fā)信對話框,若 B當(dāng)前為空閑狀態(tài),則雙方建立 TCP連接,開始進行聊天通信,可以進行信息的輸入與發(fā)送,發(fā)起語聊等。 功能性測試 先在其中一臺機器 A上啟動服務(wù)端軟件,開啟監(jiān)聽服務(wù)。通過在總集成后的程序的各個流程中添加消息提示框顯示程序內(nèi)部數(shù)據(jù)、對象的狀態(tài),并插入斷點進行單步跟蹤發(fā)現(xiàn)各模塊工作正常 ,數(shù)據(jù)也未發(fā)生異?,F(xiàn)象。 整個開發(fā)過程中,共歷經(jīng) 200多次相互斷開、連接測試, P2P文本聊天模塊終于可以正常運行。 在程序退出時,常常發(fā)生錯誤,異常退出,造成表面上看程序已結(jié)束,但卻仍然駐留在內(nèi)存中的現(xiàn)象。連接斷開后,重置 isconnected=false,將處理移交 給用戶。 wait線程不銷毀。 當(dāng)兩個客戶端在建立連接時,出現(xiàn)過程序假死異常。 在集成 P2P文本聊天時,最開始只能發(fā)起一次連接,通信雙方斷開連接而不退出程序時,再次連接就提示套接字已被占用異常。 正確性測試 正確性測試檢查軟件的功能是否符合規(guī)格說明。 關(guān)于測試人員的安排,由我本人和莫景順一起做白盒測試,由同學(xué)幫助做黑盒測試。 測試有助于提高軟件的質(zhì)量,但是提高軟件的質(zhì)量不能依賴于測試?!皬氐椎販y試”只是一種理想。 測試只能證明缺陷存在,而不能證明缺陷不存在。如果說測試的目的是為了說明程序中沒有缺陷,那么測試人員就會向這個目標(biāo)靠攏,因而下意識地選用一些不易暴露錯誤的測試示例。測試總是先假設(shè)程序中存在缺陷,再通過執(zhí)行程序來發(fā)現(xiàn)并最終改正缺陷。工作流程圖如圖 12 所示。若 user節(jié)點不存在,則返回不存在信息,結(jié)束遍歷;否則進入 user節(jié)點,對其子節(jié)點 userName進行對比。 創(chuàng)建 一 個用 戶? 是 獲取最后一個用戶的ID號并將 ID加 1作為該user的 ID屬性值 否 創(chuàng)建 XML文檔 創(chuàng)建根節(jié)點 向 user節(jié)點中添加 時間 節(jié)點 在根節(jié)點內(nèi)添加user節(jié)點 設(shè)置 user的 ID屬性值 用戶是否已存在? 否 是 返回用戶已存在 在根節(jié)userInfosList內(nèi)添加user節(jié)點 開 始 結(jié)束 山西大學(xué)商務(wù)學(xué)院本科畢業(yè)設(shè)計 18 圖 11 保存數(shù)據(jù)的程序流程圖 用戶數(shù)據(jù)的遍歷 在新用戶注冊或者已注冊用戶登錄時,需要在 文檔中查找用戶名是否存在,這個就涉及到 xml文件的遍歷。若用戶名已被注冊,則通過服務(wù)器向客戶端返回用戶名已經(jīng)被注冊的提示信息。若 ,遍歷 userInfoList,查找該注冊用戶名在 。 id 是 user元素中的一個“屬性”,“ 1001”、“ 1002”等則是“屬性值”。 文件的其余部分都是屬于文件主體, 。它主要是告訴 XML 解析器如何工作。 XML文檔結(jié)構(gòu)設(shè)計 XML分為文件序言( Prolog)和文件主體兩個大的部分。 用戶數(shù)據(jù)模型 本模塊實現(xiàn)一個簡單的用戶管理,所管理的目標(biāo)是局域網(wǎng)內(nèi)客戶端用戶。由于 企業(yè)內(nèi)部的信息越來越私密,企業(yè)只希望員工通過內(nèi)部局域網(wǎng)進行溝通與交流,所以 在本局域網(wǎng)聊天工具中,設(shè)計一個簡單用戶管理模塊,對接入服務(wù)器的用戶進行管理,能在一定程度上解決安全性問題。若接收方同意接收文件,則啟動計時器并打開 BinaryWriter,將本地語音文件發(fā)送給遠程主機,若遠程主機拒絕接收,則關(guān)閉此次 socket 連接,等待下一次文件發(fā)送事件的觸發(fā)。 SenderWorker線程執(zhí)行 SenderStart()方法。 當(dāng)用戶打開語音文件發(fā)送窗體,主窗體調(diào)用其帶 ip參數(shù)的構(gòu)造方法,實參為當(dāng)前與之建立連接的遠程主機的 ip地址,用于發(fā)送文件時建立 socket連接使用。若用戶拒絕文件傳入,則向遠程主機發(fā)送一個拒絕信號。 當(dāng) ReceiverWorker線程監(jiān)聽到遠程用戶的文件傳入請求,彈出消息提示框,用戶可以選擇同意或拒絕文件傳入請求。ReceiverWorker 線程執(zhí)行的是 ReceiverStart()方法。 表 2 文件傳輸窗體主要控件屬性 控件 屬性 值 TextBox Name txtFile Button Name btnBrowse Text 瀏覽 ... Button Name btnStart 否 執(zhí)行監(jiān)聽線程,監(jiān)聽端口 是 否 啟動計時器,接收 信息流 ,顯示 內(nèi)容 接收狀態(tài)信息 終止 收到信息 開始 是 是 否 接收端允許? 啟動計時器,發(fā)送 信息 流,顯示 內(nèi)容 發(fā)送狀態(tài)信息 將本地文件發(fā)送至接收端 發(fā)送 文字 ? 否 是 有文 字 傳 入請求 允許接收? 山西大學(xué)商務(wù)學(xué)院本科畢業(yè)設(shè)計 16 Text 開始 Button Name btnCancel Text 取消 Label Name l
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1