




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本科生畢業設計(論文) i 基于基于 socketsocket 的多線程聊天系統的多線程聊天系統 摘摘 要要 網絡通訊是目前計算機用戶進行交流最普遍的方式,各種各樣的聊天軟件也層 出不窮;服務提供商也提供了越來越豐富的通訊服務功能。本文介紹了在 windows 環境下開發局域網聊天程序思路和方法。系統使用流行的.net 開發軟件,采用 socket 技術實現網絡通訊。數據庫使用 sqlserver2005。系統采用典型的 c/s(服務 器/客戶端)構架。系統主要實現了用戶注冊、登錄、聊天、服務器管理等功能。本系 統從需求分析、系統的設計、具體功能的實現都嚴格遵循了軟件工程的思想。 關鍵詞關鍵詞
2、:socket;tcp/ip ;c/s ; 本科生畢業設計(論文) ii the implementation of chatting program abstract network is the most popular way of communication between computer users, therefore a lot of chatting softwares come out; on the other hand, more communication services are provided by the isp. this paper introduces
3、the ideas and methods of lan chatting program which are developed on windows. this system is developed by the .net software, and uses the socket technology to implement network communications. database using sqlserver2005. software is based on c/s architecture. the system mainly implements the funct
4、ions of user registration, login, chatting, server management etc. from requirement analysis, outline design, detailed design to coding, function test, the implementation of the function in this essay absolutely follow the process of the software development. key phrase: socket; tcp/ip; c/s; 本科生畢業設計
5、(論文) iii 目錄 第 1 章緒論.1 1.1 引言.1 1.2 設計思想 .1 1.3 開發工具和相關技術簡介 .1 1.3.1 sql server 2005 簡介.1 1.3.2 即時通信系統(im) .2 1.3.3 socket .2 1.3.4 tcp/ip .2 1.4 系統開發環境的選擇 .3 第 2 章 需求概述.4 2.1 功能需求.4 2.2 條件與限制.5 2.3 er 圖的設計 .5 第 3 章 聊天系統的總體設計.7 3.1 處理流程 .7 3.1.1 服務端按系統層次圖.8 3.1.2 服務端按服務啟動/關閉子系統層次圖.8 3.1.3 服務端詳細系統處理流程
6、.9 3.1.4 客戶端與服務端詳細系統處理流程.10 第 4 章 數據庫設計.11 4.1 數據庫設計說明 .11 第 5 章 socket 多線程系統的運行情況 .15 5.1 服務端界面的總體設計 .15 5.2 服務端界面的總體設計 .16 結 論.33 致 謝.34 參考文獻.35 附錄 a 譯文.36 附錄 b 外文原文.48 本科生畢業設計(論文) 1 第第 1 1 章緒論章緒論 1.11.1 引言引言 隨著社會的發展、科技的進步、互聯網的高速發展,計算機在各個領域中都得 到了廣泛的應用。計算機正在潛移默化的改變著我們的生活。現在隨著 internet 的 飛速發展,信息時代的到
7、來引發了一場知識和信息革命,計算機和現代網絡技術的 廣泛應用極大地促進了社會經濟的發展,同時也帶來了一些新興產業的發展,比如 聊天室。聊天事已經慢慢成為人們生活的一部分,呈現出良好的勢頭和廣闊的發展 前景。 網絡聊天室是一個通過國際互聯信息網絡進行多人通訊的一個系統。在這個信 息極其發達的時代,我們目前可以用來進行信息交流的方法也有非常多,比如電報、 電話、電子郵件、oicq 等等通訊手段,但是這些或者不方便或者有局限性或者有費 用的問題。但是,聊天室這個就能很好的解決這個問題,人與人之間的對話不再是 局限在面對面的方式,網絡聊天室提供交流信息的另一種場所。 本系統利用.net(c#)+ so
8、cket 構建網絡聊天室,后臺利用 sqlserver2005 數據 庫建立網站后端數據源;這樣才能更好的為用戶體驗,才能在這個涌動的社會中加 強聯系,創造出更多的財富。 1.21.2 設計思想設計思想 在互聯網上,傳統的網站或用戶都使用類似于 email(電子郵件)的形式互相發送 信息來進行一系列的交流.但這種異步交互的辦事效率可見是很低的.為提高效率,讓 用戶之間能達到實時交互的目的,所以出現了可以實時交流信息的聊天室,來滿足用戶 的需求. 1.31.3 開發工具和相關技術簡介開發工具和相關技術簡介 .1 sqlsql serverserver 20052005 簡介簡介
9、sql server 2005 是一個杰出的數據庫平臺,可用于大型聯機事務處理數據倉庫 以及電子商務等,特別是對 xml,http 的支持,以及在 web ,數據倉庫服務中的應用, 本科生畢業設計(論文) 2 而且存取運行速度遠遠高于 access 等小型數據庫. 所以很適合用于實時性要求比 較高的應用程序, 本聊天室因為實時性要求比較高,所以使用 sql server2005 作為 數據庫,以獲得高效的性能. .2 即時通信系統(即時通信系統(imim) 即時通信系統(im,instant messager)是我們開發的一款跨平臺(linux server,windows s
10、erver) ,可定制的 p2p 即時通信系統(集成多人視頻會議功能) , 為各行業門戶網站和企事業單位提供“一站式”定制解決方案,打造一個穩定,安 全,高效,可擴展的即時通信系統,在用戶使用習慣的設計上接近或兼容 msn,tm,貿易通和淘寶旺旺等即時通訊產品。 目前已經發展為功能全面,高性能,高穩定成熟的可定制即時通訊系統(集成 多人視頻會議功能) ,在國內行業網站應用領域處于領先地位,廣泛部署在各行業門 戶網站(政府和企業),為會員提供優質的個性化的定制服務。 .3 3 socketsocket socket 接口是 tcp/ip 網絡的 api,socket 接口定義了許多
11、函數或例程,程序 員可以用它們來開發 tcp/ip 網絡上的應用程序。要學 internet 上的 tcp/ip 網絡 編程,必須理解 socket 接口。 socket 接口設計者最先是將接口放在 unix 操作系統里面的。如果了解 unix 系 統的輸入和輸出的話, 就很容易了解 socket 了。網絡的 socket 數據傳輸是一種特 殊的 i/o,socket 也是一種文件描述符。 socket 也具有一個類似于打開文件的函數調用 socket(),該函數返回一個整型 的 socket 描述符,隨后的連接建立、數據傳輸等操作都是通過該 socket 實現的。 常用的 socket 類型
12、有兩種:流式 socket(sock_stream)和數據報式 socket(sock_dgram) 。流式是一種面向連接的 socket,針對于面向連接的 tcp 服 務應用;數據報式 socket 是一種無連接的 socket,對應于無連接的 udp 服務應用。 .4 tcp/iptcp/ip tcp:transmission control protocol 傳輸控制協議 本科生畢業設計(論文) 3 tcp 是一種面向連接(連接導向)的、可靠的、基于字節流的運輸層 (transport layer)通信協議,由 ietf 的 rfc 793 說明(specified) 。
13、在簡化的 計算機網絡 osi 模型中,它完成第四層傳輸層所指定的功能,udp 是同一層內另一 個重要的傳輸協議。 在因特網協議族(internet protocol suite)中,tcp 層是位于 ip 層之 上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的 連接,但是 ip 層不提供這樣的流機制,而是提供不可靠的包交換。 tcp 所提供服務的主要特點 (1)面向連接的傳輸; (2)端到端的通信; (3)高可靠性,確保傳輸數據的正確性,不出現丟失或亂序; (4)全雙工方式傳輸; (5)采用字節流方式,即以字節為單位傳輸字節序列; (6)緊急數據傳送功能。 1.41.4
14、 系統開發環境的選擇系統開發環境的選擇 系統開發環境分硬件環境和軟件環境兩部分,程序對系統的要求不是很高,因 此選擇以下的開發環境即可。 硬件環境: cpu:pentium 586 以上 內存:521m 以上 顯存: 128m 硬盤:200m 空閑 軟件環境: 操作系統:microsoft windows xp/vist/win7 microsoft visual studio 2008 microsoft sql server 2005 本科生畢業設計(論文) 4 第第 2 2 章章 需求概述需求概述 2.12.1 功能需求功能需求 系統層次圖,如圖 2.1.1: iis 提供的基本服務:
15、不 2 圖 2.1.1 服務啟動/關閉子系統層次,如圖 2.1.2 服務記錄子系統層次圖,如圖 2.1.3 easytalk 服務端 管理 員登陸 服務啟動/關閉 服務記錄 退出并保存當 前記錄 群發通知 服務啟 動/關閉 客戶登錄 服務 客戶注冊 服務 客戶查詢 服務 客戶資料 修改服務 好友添加/ 刪除服務 好友類服務 任意聊天 室服務 固定聊天 室服務 固定聊天室創建 /刪除服務 文件傳輸 服務 本科生畢業設計(論文) 5 圖 2.1.2 2.22.2 條件與限制條件與限制 本系統要求計算機上要裝了 tcp/ip 的網絡通訊協議。 2.32.3 erer 圖的設計圖的設計 概念結構是獨立
16、于任何一種數據模型的,在實際應用中,一般所用的數據庫 環境已經給定(如 sql server 或 oracel 或 mysql 或 access),在此,我們需 要從概念結構轉換到邏輯結構。 由于目前使用的數據庫基本上都是關系數據庫,因此首先需要將e-r 圖轉 換為關系模型,然后根據具體 dbms 的特點和限制轉換為特定的 dbms 支持下的 數據模型,最后進行優化。 構成 e-r 圖的基本要素是實體型、屬性和聯系,其表示方法為: 實體型(entity):具有相同屬性的實體具有相同的特征和性質,用實體名及 其屬性名集合來抽象和刻畫同類實體 ;在 e-r 圖中用矩形表示,矩形框內寫明實 體名;比
17、如學生張三豐、學生李尋歡都是實體。如果是弱實體的話,在矩形外面 再套實線矩形。 屬性(attribute):實體所具有的某一特性,一個實體可由若干個屬性來刻 畫。在 e-r 圖中用橢圓形表示,并用無向邊將其與相應的實體連接起來;比如學 生的姓名、學號、性別、都是屬性。如果是多值屬性的話,再橢圓形外面再套實 線橢圓。如果是派生屬性則用虛線橢圓表示。 聯系(relationship):聯系也稱關系,信息世界中反映實體內部或實體之間 的聯系。實體內部的聯系通常是指組成實體的各屬性之間的聯系;實體之間的聯 系通常是指不同實體集之間的聯系。在 e-r 圖中用菱形表示,菱形框內寫明聯系 本科生畢業設計(論
18、文) 6 名,并用無向邊分別與有關實體連接起來,同時在無向邊旁標上聯系的類型(1 : 1,1 : n 或 m : n)。 比如老師給學生授課存在授課關系,學生選課存在選課 關系。如果是弱實體的聯系則在菱形外面再套菱形。 做 e-r 圖的步驟: (1)確定所有的實體集合 (2)選擇實體集應包含的屬性 (3)確定實體集之間的聯系 (4)確定實體集的關鍵字,用下劃線在屬性上表明關鍵字的屬性組合 (5)確定聯系的類型,在用線將表示聯系的菱形框聯系到實體集時,在線旁注 明是 1 或 n(多)來表示聯系的類型 。 e-r 圖設計如圖 2.3.1: 用戶id 密碼用戶名 性別 個人信息 頭像 vip信息 好
19、友id 用戶信息 好友信息 聊天室id用戶id 聊天室名稱 用戶id 消息類型 聊天室信息 離線消息 消息內容 發送用戶 socket多線程聊天系統 構成 圖 2.3.1 本科生畢業設計(論文) 7 第第 3 3 章章 聊天系統的總體設計聊天系統的總體設計 3.13.1 處理流程處理流程 圖 3.1 圖形符號說明圖形符號說明 任何處理,包括程序 處理、機器處理、人工處 理等。 順序存儲,例如磁 帶存儲。 人工處理,例如會計 在銀行支票上的簽名。 紙帶存儲。 任何輸入,包括人工 輸入,程序輸入等。 文檔輸出,例如打 印數據報表。 卡片輸入。顯示終端。 手工輸入。頁內連接。 任何存儲。換頁連接。
20、內部存儲。數據流。 直接存儲,例如磁盤 存儲。 通信鏈路。 本科生畢業設計(論文) 8 .1 服務端按系統層次圖服務端按系統層次圖 管理員登陸子系統功能流程圖,如圖 3.1.1 圖 3.1.1 .2 服務端按服務啟動服務端按服務啟動/ /關閉子系統層次圖關閉子系統層次圖 服務啟動/關閉子系統功能流程圖,如圖 3.1.2 登錄 程序 輸入管理員帳號 密碼 驗證 程序 easyta lk 服務端 管理員員 數據庫 easytalk 服務 端啟動 服務 功能啟動 客戶登錄 服務程序 客戶注冊 服務程序 客戶查詢 服務程序 客戶資料修 改服務程序 好友添加/刪 除服務程
21、序 好友類服務程序 任意聊天 室服務程序 固定聊天室 服務程序 固定聊天室創建/ 刪除服務程序 文件傳輸 服務程序 圖 3.1.2 本科生畢業設計(論文) 9 .3 服務端詳細系統處理流程服務端詳細系統處理流程 本科生畢業設計(論文) 10 .4 客戶端與服務端詳細系統處理流程客戶端與服務端詳細系統處理流程 服務端服務 數據庫 客戶端啟動 登錄 客戶請求聊 天內容發關 客戶私聊模 式 客戶請求當 前在線客戶列表 數據 客戶請求客 戶請求指定的客 戶資料當前在線 客戶列表數據 客戶請求自 身修改信息前的 資料 客戶請求自 身修改信息后的 資料 客戶請求進 入聊天室
22、 客戶請求退 聊天室 客戶退出客 戶端所返回的 客戶請求新 建聊天室 客戶請求 et- show 要獲取的 數據與好友聊天 時,獲取好友信 息 客戶請求 et 聊天室的響應 客戶請求頭 像路徑 客戶請求按 帳號搜索用戶 客戶請求按 昵稱搜索用戶 客戶請求按 昵稱搜索用戶 客戶請求添 加好友 本科生畢業設計(論文) 11 圖 3.1.4 第第 4 4 章章 數據庫設計數據庫設計 4.14.1 數據庫設計說明數據庫設計說明 圖 4.1.1 如圖 4.1.1 所示:數據庫:chatroom,表有: chatrrom_list_info、fixchatroom_list_info、fixuser_ch
23、atroom_list、myfriend、offline_ notice、user_chatroom_list、user_info、users chatrrom_list_info 是任意聊天房間的表,如圖 4.1.2 所示 圖 4.1.2 roomid 是任意聊天房間 id 號。 roomname 是任意聊天房間名。 fixchatroom_list_info 是固定聊天房間的表,如圖 4.1.3 所示 服務響應 本科生畢業設計(論文) 12 圖 4.1.3 fixroomid 是固定房間的 id 號。 fixroomname 是固定聊天房間的房間名。 creator_uid 是該房間的創建
24、者。 fixuser_chatroom_list 是固定聊天房間的成員列表,如圖 4.1.4: 圖 4.1.4 fixroomid 是固定聊天房間的 id 號。 uid 是成員 id 號。 honey_name 是成員的昵稱。 myfriend 是我的好友成員表,如圖 4.1.5 所示 本科生畢業設計(論文) 13 圖 4.1.5 共有 120 個好友成員。friend0-friend120 uid 是用戶 id 號。其它都是該 uid 的好友成員字段。 offline_notice 是離線通知處理表,如圖 4.1.6 圖 4.1.6 tag_uid 是準備要通知的成員 id 號。 notic
25、e_type 是通知的類型。 notice_content 是通知的內容。 sender_uid 發送通知的 id 號。 user_chatroom_list 是任意聊天房間里的成員表,如圖 4.1.7 本科生畢業設計(論文) 14 圖 4.1.7 roomid 是該成員所在的任意聊天房間的房間 id uid 是該成員的 id 號。 honey_name 是該成員的昵稱。 user_info 是用戶信息表,如圖 4.1.8: 圖 4.1.8 uid 就是該用戶的 id 號。 honey_name 是該用戶的昵稱。 gander 是該用戶的性別。 person_information 是該用戶的
26、個人說明。 head_image 是該用戶的頭像路徑(這里的本軟件自帶的圖片路徑,時間問題,準備 增量 diy 頭像)。 isvip 是標識該用戶是否 vip 用戶。即:會員用戶。 users 是單純記錄帳號和密碼的表,如圖 4.1.9 本科生畢業設計(論文) 15 圖 4.1.9 uid 是用戶帳號。 psw 是用戶密碼。 第第 5 5 章章 socketsocket 多線程系統的運行情況多線程系統的運行情況 首先是要啟動了服務端,再開始啟動客戶端,這時客戶端才能正常運行。 5.15.1 服務端界面的總體設計服務端界面的總體設計 .1 登錄界面登錄界面 圖 5.1.1 服務沒
27、有設置什么操作。就只有自動的即時的對客戶操作進行監控。 等到有客戶請求各類操作時,都有相應的信息顯示。 設置數據源 這里是即時服務的記 錄列表 本科生畢業設計(論文) 16 如下圖: 圖 5.1.2 如上圖所顯:有兩位用戶已經通過客戶端登錄了服務器。 還有更多的服務功能。我們來看看客戶端的豐富操作。 5.25.2 服務端界面的總體設計服務端界面的總體設計 .1 登錄界面登錄界面 為了演示效果,所以開了兩個客戶端程序測試。如圖 5.2.1: 圖 5.2.1 點擊此按扭 本科生畢業設計(論文) 17 這就是我們的登錄界面了。 common.ld.toolstripmenuitem.
28、enabled = false; string temppsw = txtbox_psw.text.trim(); if (tempuid = | tempuid = null | temppsw = | temppsw = null) messagebox.show(請輸入完整或有效的帳號和密碼;, 提示); return; 如果沒有注冊的朋友,也可以點下面的那個點擊注冊。 圖 5.2.2 點擊注冊按鈕。 就可以看到注冊成功的界面啦。 本科生畢業設計(論文) 18 圖 5.2.3 把帳號和密碼都輸好后,接下來點一下“登錄”按鈕即可。 圖 5.2.4 登錄后,你可以馬上看到,你自己當前的頭像還
29、是個“?”號的,好友也沒有。 趕去改修頭像或是添加好友吧。 public static string modifyuserinfo(string send_uid, string modify_honey_name, string modify_gander, string modify_personel_information,string header_image); 點擊 本科生畢業設計(論文) 19 / / 響應注冊的函數 / / 注冊的新昵稱 / 注冊的新密碼 / 注冊的新性別 / 注冊的新個人說明 / 返回ok,則成功,否則失敗 public static string newus
30、erregiste(string honey_name,string psw,string gander,string personel_information); 圖 5.2.5 點擊這里修改 頭像 點擊這里,可以添加 好友 本科生畢業設計(論文) 20 我們先來設置一下頭像先,再添加好友。 圖 5.2.6 private void btn_modify_click(object sender, eventargs e) common.et.picbox_header_images.image = personal_info.header_image; if (.equals(txtbox_
31、modify_honey_name.text) | .equals(txtbox_modify_person_info.text) | (rbtn_modify_female.checked = false else if (checkerrorcorrect.modifyganderiscorrect string gander = ; if (rbtn_modify_female.checked) gander = personal_info.modify_gander = rbtn_modify_female.text; else gander = personal_info.modif
32、y_gander = rbtn_modify_male.text; string person_info = personal_info.modify_personel_information = txtbox_modify_person_info.text; #region/要修改的部份,改成修改資料函數 /messagebox.show(personal_info.modify_honey_name); common.modifyuserinfo(personal_info.uid, personal_info.modify_honey_name, personal_info.modify
33、_gander, personal_info.modify_personel_information, personal_info.header_path); #endregion else messagebox.show(你所填寫的資料存在不合法的字符n 請您認真填寫., , messageboxbuttons.ok, messageboxicon.information); 本科生畢業設計(論文) 22 圖 5.2.7 回到原來的最初畫面:可以看到頭像已經修改成剛剛自己所選的了。 圖 5.2.8 本科生畢業設計(論文) 23 頭像雖改好了,但是沒人和我聊天啊? 那現在就來添加好友吧: (不
34、過因為本系統時間倉促,離線加好友未完成,只完成了雙方在線情況下才 可以添加好友,那現在再登錄另兩個帳號)。 以下兩個用戶都有自己的好友了。 現在用剛剛新注冊的再和這兩位朋友添加好友: 圖 5.2.9 圖 5.2.10 同樣的方法,也可以把其它用戶添加至自己的好友。 任意聊天和固定聊天。 本科生畢業設計(論文) 24 圖 5.1.11 以下是有三人在線,可以看到聊天效果。 也可以在多人聊天里,私聊功能。類似好友聊天功能。 本科生畢業設計(論文) 25 下圖:我們可以看到私聊效果。 還可以查找多人任意聊天室里的用戶相關的個人信息哦。 本科生畢業設計(論文) 26 如果感覺這個皮膚還不是自己最喜歡的
35、。還可以在設置里的皮膚管理。 可以選擇 6 種皮膚。 本科生畢業設計(論文) 27 在設置里,還可以修改密碼。 要看好右邊的說明要求就可以快速修改好自己的密碼了。 本科生畢業設計(論文) 28 舊密碼就是以前的密碼,即:修改前的密碼。如果輸錯了,那會修改失敗地哦。 本科生畢業設計(論文) 29 弄了這么多東西。回來看看我們的服務端。 是否服務記錄多了很多記錄呢? 主監聽線程: system.windows.forms.control.checkforillegalcrossthreadcalls = false; clients = new arraylist(); processor = n
36、ew thread(new threadstart(startlistening); processor.start(); / / 主制作監聽方法模塊 / private void startlistening(); /服務器線程服務 private void servertoclient() /新建一個 tcpclient 網絡客戶端服務; 本科生畢業設計(論文) 30 socket client = clientsocket; /新建一個 buffer 位類型,以方便存放客戶端的請求內容; byte buffer = new byteclient.receivebuffersize; /開
37、啟監聽; bool keepalive = true; int index=0; int hacker = 0; while (keepalive) try client.receive(buffer); catch (exception) if (buffer.length != 0) datetime now = datetime.now; /把接收的內容存放在 clientcommand 字符串里; encoding encode = encoding.getencoding(gb2312); string clientcommand = encode.getstring(buffer)
38、; /把接收內容分別存放在字符串數組中; string client_request = clientcommand.split(new char rdataheader_char ); / / 控制服務器表列控件的增加; / / 用戶 id 本科生畢業設計(論文) 31 / 登錄成功與否狀態 private void add_items(string str); / / 向客戶端發送消息; / / 指定要發送的客戶類 / 指定要發送的消息; private void sendtoclient(client cl, string message); private void conecte_s
39、tate_textchanged(object sender, eventargs e); private void chatserver_formclosing(object sender, formclosingeventargs e); / / 服務器關閉時,給每一個用戶都發送一個關閉提示 / private void servicclose(); 本科生畢業設計(論文) 32 結結 論論 上述就是基于 socket 的多線程聊天系統全部的設計和開發過程。本系統經歷了 從系統問題的提出系統可行性分析系統數據庫的設計總體的功能模塊設計 詳細設計最后到程序的實現,就是以這樣的一個思路完成的整
40、個系統的開發。 這次畢業論文是本科學習階段一次非常難得的理論與實際相結合的機會,通過 這次比較完整的在線留言板系統,使自己擺脫了單純的理論知識學習狀態,與實際 設計的結合鍛煉了我的綜合運用所學的專業基礎知識,解決實際問題的能力,同時 也提高我查閱文獻資料、設計手冊、設計規范以及軟件編碼規范等其他重要能力水 平,而且通過對整體的掌控,對局部的取舍,以及對細節的斟酌處理,都使我的能 力得到了鍛煉,經驗得到了豐富,并且意志品質力,抗壓能力及耐力也都得到了不 同程度的提升。 雖然畢業設計內容繁多,過程繁瑣但收獲卻更加豐富。各種系統的適用條件, 各種模塊的選用標準,各種設計模式的實現方式,都是隨著設計的
41、不斷深入而不斷 熟悉并學會應用的。和老師的溝通交流更能使人從專業的角度對設計有了新的認識 也對自己提出了新的要求,舉個簡單的例子:前期如果對需求的掌握不夠到位就匆 匆實現功能,到后來很有可能是白費精力,推倒重來,這些本是我工作后才會意識 到的問題,通過這次畢業設計使得提前了解了這些知識,這是很珍貴的。 通過這次畢業設計,使人感到到高科技、新知識的力量。這次畢業設計過程中, 得到了學校的大力支持,提供了舒適的工作學習環境,也得到了老師、教授的精心 指導,在此表示衷心的感謝! 由于這是第一次完整的設計程序,加之水平有限,設計中難免有不當之處,還 請各位老師給予批評、指正。 本科生畢業設計(論文)
42、33 致致 謝謝 本次畢業設計是在 指導老師的精心指導下完成的。老師深厚的的學識,嚴 謹的治學態度,一絲不茍的工作作風,寬容大度、隨和待人的高尚品質給我留下 了深刻的印象。由于 現在做的課題所用的知識以前 很多都沒有接觸過,因此剛 開始比較吃力,老師在此過程中給了我很多的鼓勵和幫助,在一個又一個難 關的克服后,思路慢慢清晰。設計結束,在理論和實踐方面的能力都獲得了很大 的提高。 在此謹向 他致以崇高的敬意和衷心的感謝 ! 在學習期間得到了同學的鼎力 幫助,特別是 宿舍的同舍友們 ,在此表示深深地感謝 ! 學校老師對我們嚴格的 要求也是我們工作得以順利開展的必要條件,在畢業之際,向我的母校表示感
43、謝! 本科生畢業設計(論文) 34 參考文獻參考文獻 1. 微軟公司 著。面向.net 的 web 應用程序設計。北京:高等教育出版社,2004。 2. 微軟公司 著。基于 c#的 windows 應用程序設計。北京:高等教育出版社,2004。 3. 陳克力 著。sql server2005 編程基礎。北京:清華大學出版社,2008。 4. 臧鐵鋼等編著。軟件開發技術基礎。北京:中國鐵道出版社,2005。 5. cochran j k,qual b k p . a microcomputer system for qualitativfe simulationj. simulation,200
44、5。 6. 開發視界論壇 http:/ 7. csdn 網站 http:/。 8. 張領. asp.net 項目開發全程實錄m. 北京: 清華大學出版社. 2008。 9. 龍馬工作室. 新編 asp.net 從入門到精通m. 北京:人民郵電出版社. 2009 。 10. 王小科. c#開發實戰寶典m. 北京:清華大學出版社. 2010。 本科生畢業設計(論文) 35 附錄附錄 a 譯文 基于基于 c#c#的相關技術的相關技術 考慮一個包含按鈕控件的 asp.net 頁面。當單擊該按鈕時,觸發了一個 click 事件。不同于 html 按鈕控件,asp.net 的按鈕有一個 runat=ser
45、ver 屬性,它為所 有 html 按鈕的標準功能添加服務器端處理屬性。 當觸發 click 事件時,瀏覽器則發送頁面到服務器,以便處理客戶端事件。與 此同時,一個事件消息傳送到服務器。服務器端確定是否有與 click 事件關聯的事 件處理程序,如果有,則在服務器端執行該事件處理程序。 事件消息通過 http post 方式發送到服務器。asp.net 將自動(這是一個技 術術語)處理所有捕獲事件的基礎結構,將它傳送到服務器,并處理事件。作為程 序員,您所要做的就是創建事件處理程序。 許多事件,如 mouseover,不會進行服務器端事件處理,因為那樣做會降低性 能。由于所有服務器端處理都需要
46、回傳(從客戶端到服務器,再返回客戶端的一個 來回) ,因此,不能要求每次發生 mouseover 時都回傳頁面。如果一定要處理這些 事件,那么只能在客戶端(使用腳本)處理,這超出了 asp.net 的范圍。 事件參數 事件依靠委托實現。委托是一個對象,它封裝了對方法的描述,即處理事件所 指定的任務。 根據慣例,所有 asp.net 事件處理程序都有兩個參數,并且返回空值。第一個 參數表示觸發事件的對象。習慣性的稱之為 sender,盡管這不是必要的。 第二個參數稱作事件參數,它包括事件信息的細節,如果有的話。對于多數事 件,事件參數是 eventargs 類型,它沒有任何屬性,因此,事件的通用
47、原型為: private void eventname (object sender, eventargs e) 本科生畢業設計(論文) 36 對于某些控件,事件參數可以從 eventargs 類派生,并顯示該事件類型的屬性 細節。例如,adrotator 控件的 adcreated 事件處理程序,接收 adcreatedeventargs 類型的參數,它有 adproperties、alternatetext、imageurl 和 navigateurl 屬性。 應用程序事件和會話事件 asp.net 支持應用程序事件和會話事件,這二者為傳統 asp 程序員所熟知。 當應用程序啟動時,將觸發
48、 application_start 事件。這時,可以初始化整個應用程序 中需要使用的各種資源,例如,數據庫連接字符串(而不是數據庫連接對象本身) 。 當應用程序停止時,將觸發 application_end 事件。這時,可以關閉資源,同時執行 任何其他必要的日常管理。垃圾回收機制將自動釋放內存。然而,如果分配了托管 的資源,例如,使用無需.net 框架編譯的語言所創建的組件,那么必須自行手工清 除。 會話事件也是如此。當用戶第一次請求應用程序的頁面時,會話開始。當應用 程序關閉會話或會話超時,會話結束。當會話開始時,觸發 session_start 事件,這 時,可以初始化會話生命周期中使用
49、的資源,例如,打開數據庫連接。盡管更好的 時機是:需要的時候再去打開數據庫連接,并且使用完畢立刻關閉。當會話結束時, 觸發 session_end 事件。 頁面和控件事件 頁面和控件都包含事件,它們繼承自 control 類(在 error 事件的情況下,則繼 承自 templatecontrol 類) 。所有這些事件都傳遞沒有屬性的 eventargs 類型的事件參 數。在表 3-1 中列舉了大多數公共的事件。 (每個類所有屬性、方法和事件的完整列 表可以在相關文檔中找到) 表 3-1 部分公共的頁面和控件事件 事件名稱說 明 databinding當控件綁定到數據源時發生 disposed
50、當控件從內存中釋放時發生 error只在頁面中;當拋出未處理的異常時發生 init當控件初始化時發生 load當控件加載到頁面對象時發生 本科生畢業設計(論文) 37 prerender 當控件準備做輸出時發生 unload 當控件從內存中卸載時發生 回傳事件 vs 非回傳事件 回傳事件促使表單立刻回傳到服務器。這包括單擊類型的事件,例如 button.click。與之相對的是,某些事件(典型的有修改事件,例如 textbox.textchanged,或者選擇事件,例如 checkbox.checkedchanged)被認為是 非回傳的,因為,事件并不立刻回傳到服務器。這些事件由控件捕獲,直到
51、再次發 生回傳。設置非回傳事件控件的 autopostback 屬性為 true,則可以強制使它們采用 回傳方式。 表 3-2 回傳和非回傳控件 回傳控件非回傳控件 button bulletedlist calendarcheckbox datagridcheckboxlist datalistdropdownlist fileupload listbox gridviewradiobuttonlist imagebuttonradiobutton imagemap textbox linkbutton menu repeater ispostback page 對象具有 ispostbac
52、k 屬性。這是一個只讀的 boolean 類型屬性,它可以指 示頁面是第一次加載還是為了響應客戶端回傳而進行的加載。您可以只在頁面第一 次加載時,執行一些耗費資源的操作(例如,從數據庫獲取數據或構造列表項) 。如 果頁面回傳到服務器并再次加載,就無須重復這些操作了。因為,任何輸入或構建 的數據都已被保留(使用視圖狀態,見第 6 章)到后續的回傳中。下面的代碼段用 本科生畢業設計(論文) 38 于測試 ispostback 屬性,它跳過了之前提到的耗費資源的操作: protected void page_load(object sender, eventargs e) if (! ispostb
53、ack) / 僅在頁面第一次加載時,執行重要操作 visual studio 2005 中的事件 visual studio 2005(vs2005)ide 能自動處理 asp.net 實現事件過程中的大量 工作。例如,它為每個控件提供所有可用的事件列表。如果選擇實現一個事件,只 需輸入對應事件處理程序的名稱。此時,ide 將創建所需的模板代碼,并綁定相關 委托。 當新建一個 web 應用程序時,vs2005 將自動包含下面的代碼,以便處理頁面 加載事件: protected void page_load(object sender, eventargs e) 每個頁面都包含多個類似于 pag
54、e_load 的、可創建處理程序的事件。這些預定 義的事件處理程序的名稱由 page_連接事件名組成。因此,下面的事件處理程序會 自動關聯到它們相對應的事件: page_load page_aborttransaction page_committransaction page_databinding page_disposed page_error page_init page_initcomplete page_load page_loadcomplete page_preinit page_preload page_prerender page_prerendercomplete 本科生
55、畢業設計(論文) 39 page_savestatecomplete page_unload 另外,頁面中的控件具有它們自身的事件,您也能處理這些事件。當您添加控 件后,在“design”視圖中單擊控件,然后,單擊“properties”窗口中的事件按鈕(閃 電圖標) ,將會看到控件的事件。例如,圖 3-1 列舉了頁面中按鈕控件的事件,其中 還指示了事件按鈕。 您可以在任意事件旁的空白處輸入方法名,或者雙擊該空白,vs2005 就會創建 事件處理程序。如圖 3-2 所示,在兩種情況下,您都會處于事件處理程序中,并準 備輸入代碼以實現事件。 在這種情況下,雙擊 click 事件旁的空白,vs20
56、05 則命名一個 button1_click(控件名_事件名)事件。同時,創建事件處理程序的構架,并且光標 處于該事件處理程序中。 每種控件都有一個默認事件,它多數是該類型控件最常實現的事件。可以預測 button 控件的默認事件是 click 事件。您可以通過在“design”視圖中,雙擊控件來創 建默認事件的處理程序。因此,無需使用上文所述方式創建 button1_click 事件處理 程序,而只要打開“design”視圖,并雙擊該控件即可。還有一種方法可實現相同效 果,即創建一個名為 button1_click 的事件處理程序,然后,將光標置于事件處理程 序中,隨時準備輸入實現方法的代碼
57、。 表 3-3 列舉出了一些常用 web 控件的默認事件。 表 3-3 部分 asp.net 控件的默認事件 控 件 默認事件 adrotator adcreated bulletedlistclick 續表 3-3 部分 asp.net 控件的默認事件 控 件 默認事件 button click calendarselectionchanged checkbox checkedchanged checkboxlistselectedindexchanged 本科生畢業設計(論文) 40 datagridselectedindexchanged datalistselectedindexcha
58、nged dropdownlist selectedindexchanged hyperlink click imagebuttonclick imagemap click labelnone linkbutton click listboxselectedindexchanged menumenuitemclick radiobuttoncheckedchanged radiobuttonlistselectedindexchanged repeateritemcommand 多個控件共用一個事件處理程序 一個事件處理程序可以處理來自多個不同控件的事件。例如,有一個普通的按 鈕單擊事件處理程
59、序,它可以處理窗體上所有按鈕的單擊事件。通過測試 sender 參 數值,可以確定觸發事件的具體按鈕。在下面的代碼段中,單擊按鈕的事件處理程 序將 sender 對象(也就是觸發事件的控件)轉換為 button 類型,然后,將該按鈕的 id 屬性賦值給一個字符串變量。 這樣可以大大減少重復性代碼,使得程序更便于閱讀和維護。 asp.net 服務器控件 在 asp.net 中,最為重要的是 asp.net 服務器控件。服務器控件包含方法以 及與之關聯的事件處理程序,并且這些代碼都在服務器端執行。 (部分服務器控件也 提供客戶端腳本,盡管如此,這些控件事件仍然會在服務器端處理) 如果控件包括可視化
60、組成部分(例如,標簽、按鈕和表格) ,那么 asp.net 將 在檢測目標瀏覽器接收能力的情況下,為瀏覽器呈現傳統的 html。如果 asp.net 服務器控件需要利用客戶端腳本,以實現某些功能,如第 8 章所描述的驗證控件那 樣,那么將會生成適應于瀏覽器類型的腳本,并發送給瀏覽器。然而,服務器端驗 本科生畢業設計(論文) 41 證過程仍然執行。 asp.net 服務器控件提供統一的編程模型。例如,在 html 中,input 標簽 ()可用于按鈕、單行文本域、復選框、隱藏域和密碼。而多行文本域,則 必須使用標簽。使用 asp.net 服務器控件時,每種不同的功能類型都將 對應一種特定控件。例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒教育學 幼兒教育概述課件
- 打造幼教服務產業鏈園區生態圈
- 2024-2025學年下學期高二生物人教版期末必刷常考題之生態系統的物質循環
- 部編版二年級下冊第七單元《大象的耳朵》教案
- 8 4 拋物線-2026版53高考數學總復習A版精煉
- 2025屆河北省唐山市高三二模語文試題(解析版)
- 2024-2025學年四川省雅安市高三第一次診斷性考試語文試題(解析版)
- 2024-2025學年山東省威海市文登區高三第一次模擬語文試題(解析版)
- it項目應急預案
- 信訪問題回復函
- 《積極心理學(第3版)》 課件 第2章 心理流暢體驗
- FURUNO 電子海圖 完整題庫
- DB50-T 548.4-2024城市道路交通管理設施設置規范第4部分:道路交通安全設施
- 項目股份買斷合同范本
- 上海市2023年高中學業水平考試生物試卷真題(含答案詳解)
- 校園文印店經營方案
- 2024屆重慶市沙坪壩區英語八年級第二學期期末監測試題含答案
- 《幾種常見的天線》課件
- 【大廠案例】華為數據治理方法論與實踐解決方案
- DL-T5169-2013水工混凝土鋼筋施工規范
- spss因子分析論文
評論
0/150
提交評論