基于WINSOCK網(wǎng)絡(luò)聊天室_第1頁
基于WINSOCK網(wǎng)絡(luò)聊天室_第2頁
基于WINSOCK網(wǎng)絡(luò)聊天室_第3頁
基于WINSOCK網(wǎng)絡(luò)聊天室_第4頁
基于WINSOCK網(wǎng)絡(luò)聊天室_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、網(wǎng)絡(luò)與通信程序設(shè)計(jì)課 程 大 作 業(yè) 題目:基于WINSOCK網(wǎng)絡(luò)聊天室的設(shè)計(jì) 姓名:_張九妹_ 學(xué)號:_ 班級: 班 日期:_2010 年6月 3 日_ 目錄1 概述21.1 開發(fā)背景21.2 目的.22.方案選擇32.1程序體系結(jié)構(gòu)選擇32.2 I/O模型42.3 開發(fā)環(huán)境及技術(shù)52.3.1開發(fā)環(huán)境52.3.2開發(fā)技術(shù)簡介53 系統(tǒng)設(shè)計(jì)63.1系統(tǒng)概論63.2系統(tǒng)的功能設(shè)計(jì)63.2.1系統(tǒng)的功能結(jié)構(gòu)63.2.2系統(tǒng)的功能特點(diǎn)64 系統(tǒng)詳細(xì)設(shè)計(jì)64.1 數(shù)據(jù)庫設(shè)計(jì)64.1.1創(chuàng)建數(shù)據(jù)庫源名(DSN)64.1.2 數(shù)據(jù)庫的構(gòu)成74.2服務(wù)器端設(shè)計(jì)84.3客戶端設(shè)計(jì)94.4服務(wù)器端與客戶端設(shè)計(jì)過

2、程105 系統(tǒng)測試125.1服務(wù)器端如圖:115.2 客戶端測試:116 總結(jié)131 概述1.1 開發(fā)背景 隨著internet在中國的迅速發(fā)展,人們?nèi)粘I钪性絹碓蕉嗟厥褂眠@項(xiàng)新技術(shù)來為自己的工作和學(xué)習(xí)服務(wù)。在眾多internet關(guān)聯(lián)功能中,有一項(xiàng)新的業(yè)務(wù)正成為所有用戶所津津樂道的交流方式,這就是網(wǎng)上聊天。根據(jù)調(diào)查現(xiàn)在網(wǎng)民使用現(xiàn)狀,網(wǎng)上聊天室的使用百分比具榜首。 聊天室是一個(gè)通過國際互聯(lián)信息網(wǎng)絡(luò)進(jìn)行多人通訊的系統(tǒng)。在這個(gè)信息極其發(fā)達(dá)的時(shí)代,目前我們可以用來進(jìn)行信息交流的方法非常多,比如電報(bào)、電話、電子郵件等通訊手段,這些或者不方便或者有局限性或者有費(fèi)用的問題,比如電話就是屬于費(fèi)用比較高的一種

3、方式,而且一般情況下不能進(jìn)行多人會談,那么一個(gè)需要幾個(gè)人一起討論的會議就不能舉行,一般情況下都需要花費(fèi)大量的人力物力把這幾個(gè)人聚集到同一地點(diǎn)才能進(jìn)行討論。非但費(fèi)時(shí)費(fèi)力費(fèi)錢而且效果也不一定很好。電子郵件則不是一種及時(shí)聯(lián)系的手段,需要一定時(shí)間才能到達(dá),只能作為一種輔助交流的手段。但是,聊天室就能很好的解決這個(gè)問題,我們不需要聚集在同一地點(diǎn),各自在不同的地點(diǎn)就可以在聊天室中發(fā)言,大家互相討論。它費(fèi)用低廉,信息交流速度快,只有這樣,才能在這個(gè)涌動的社會中加強(qiáng)聯(lián)系,創(chuàng)造出更多的財(cái)富。1.2目的 由于計(jì)算機(jī)網(wǎng)絡(luò)通信技術(shù)的發(fā)展,網(wǎng)絡(luò)的應(yīng)用越來越廣泛,編寫網(wǎng)絡(luò)通信軟件的工具和方法有很多,而使用Winsock是

4、其中一種簡單有效的方法。基于WINSOCK的網(wǎng)絡(luò)聊天室開發(fā)給出了一個(gè)在運(yùn)行TCP/IP 協(xié)議服務(wù)器程序和客戶程序(C/S),服務(wù)器端創(chuàng)建監(jiān)聽套接字,并為它關(guān)聯(lián)一個(gè)本地地址(指定IP地址和端口號),然后進(jìn)入監(jiān)聽狀態(tài)準(zhǔn)備接受客戶的連接請求。通過WINSOCK 模型的理解與應(yīng)用,目的就是讓我們初學(xué)者熟悉即學(xué)會應(yīng)用網(wǎng)絡(luò)結(jié)構(gòu)和網(wǎng)絡(luò)協(xié)議,進(jìn)行網(wǎng)絡(luò)編程,學(xué)會使用WINSOCK 編程接口,懂得各種I/O模型的優(yōu)缺點(diǎn),能夠熟練使用他們進(jìn)行程序設(shè)計(jì)。能夠解決網(wǎng)絡(luò)編程中的一般性問題,如文件傳輸、錯誤處理等。由淺入深的了解,無論是WEB服務(wù)器,還是各種游戲服務(wù)器,每時(shí)每刻都要處理成千上萬的客戶連接,掌握服務(wù)器的性能和

5、可伸縮性問題。本文開發(fā)了一個(gè)聊天室,擁有聊天室具備的基本功能:聊天、多人聊天、文件傳輸、打印等,使用客戶端的程序登錄到服務(wù)器上,就可以與登錄在同一IRC服務(wù)器上的客戶進(jìn)行交談。2.方案選擇2.1程序體系結(jié)構(gòu)選擇客戶機(jī)/服務(wù)器體系結(jié)構(gòu)(C/S):在這個(gè)體系結(jié)構(gòu)中有一個(gè)總是在運(yùn)行的主機(jī)是服務(wù)器,他可以為來自其他許多成為客戶的主機(jī)提供服務(wù)。服務(wù)器方有一個(gè)固定的、公開的IP地址,而且重視打開的,所以客戶端程序才能通過服務(wù)器地址發(fā)送封包與之進(jìn)行通信??蛻糁鳈C(jī)可以隨時(shí)打開和關(guān)閉,客戶端程序之間不是直接交流信息,他們僅與服務(wù)器通信P2P體系結(jié)構(gòu):單純的P2P體系結(jié)構(gòu)中,不再有總是運(yùn)行的服務(wù)器,任意的兩臺主機(jī)

6、對都可以直接相互通信。因?yàn)镻EER之間可以不經(jīng)過特定的服務(wù)器通信。在這個(gè)結(jié)構(gòu)中,不再需要任何及其總是打開的,也不再需要任何及其有固定的IP地址。它的優(yōu)點(diǎn)一就是它的可伸縮型,缺點(diǎn)是用戶高度分散,它們難以管理。 本文采用了C/S結(jié)構(gòu),不單純使用P2P體系結(jié)構(gòu)。綜合理解需要一個(gè)中心服務(wù)器來維護(hù)總體狀態(tài),初始化客戶端之間的連接等,這可以算是兩種體系結(jié)構(gòu)的混合了。2.2 I/O模型五種WinSock I/O模型的特點(diǎn)及比較:(1)select 模型: select模型是WinSock中應(yīng)用最廣泛的模型之一,核心就是select函數(shù),它可用于 判斷套接字上是否存在數(shù)據(jù),或者能否向一個(gè)套接字寫入數(shù)據(jù)。這個(gè)函

7、數(shù)可以有效地防止應(yīng)用程序在套接字處于阻塞模式中時(shí),send或recv進(jìn)入阻塞狀態(tài);同時(shí)也可以防止產(chǎn)生大量的WSAEWOULDBLOCK錯誤。select的優(yōu)勢是能夠從當(dāng)個(gè)線程的多個(gè)套接字上進(jìn)行多重連接及I/O這就避免了伴隨阻塞套接字和多重連接的線程劇增 (2)WSAAsyncSelect 模型: 這個(gè)是我個(gè)人最喜歡的一個(gè)模型。因?yàn)樗彩且韵榛A(chǔ)的。關(guān)鍵就是WSAAsyncSelect函數(shù),將socket消息發(fā)送到hWnd窗口上,然后在那里 處理相應(yīng)的FD_READ,FD_WRITE等等消息 優(yōu)點(diǎn): WSAAsyncSelect和WSAEventSelect模型提供了讀寫數(shù)據(jù)能力的異步通知,

8、但他們不提供異步數(shù)據(jù)傳送,而重疊及完成大unkou提供異步數(shù)據(jù)的傳送。而且它可以在系統(tǒng)開銷不大的情況下同時(shí)處理很多連接,而select模型還需要建立 fd_set結(jié)構(gòu)。缺點(diǎn):必須要使用一個(gè)窗口接收消息-_-b ,如果處理成千上萬的套接字就力不從心了 (3) WSAEventSelect 模型:這個(gè)也是以時(shí)間為基礎(chǔ)的網(wǎng)絡(luò)事件通知,但是與WSAAsyncSelect不同的是, 它主要是由事件對象句柄完成的,而不是通過窗口。 這個(gè)就有點(diǎn)復(fù)雜了,一句半句說不清. 優(yōu)點(diǎn):不需要窗口 。缺點(diǎn):每次只能等待64個(gè)事件,所以處理多個(gè)套接字時(shí)有必要組織一個(gè)線程池;所以伸縮性就不如后面的完成端口了 (4)重疊模型

9、 (Overlapped I/O):這個(gè)模型可以使程序能達(dá)到更加的系統(tǒng)性能?;驹O(shè)計(jì)原理就是讓應(yīng)用程序 使用重疊的數(shù)據(jù)結(jié)構(gòu),一次投遞一個(gè)或多個(gè)I/O請求。針對這些提交的請求,在他們完成之后,應(yīng)用程序可為他們提供服務(wù)。 它又分為兩種實(shí)現(xiàn)方法:在事件中使用,還有就是完成例程,每樣都不是很好(5) 完成端口模型: 這個(gè)是所有里面最為復(fù)雜的I/O模型,最好是在理解了重疊I/O的基礎(chǔ)之上再去學(xué)習(xí)理解。 但完成端口提供了最好的伸縮性,往往可以使系統(tǒng)達(dá)到最好的性能,是處理 成千上萬的套接字的首選。 從本質(zhì)上說,完成端口模型要求創(chuàng)建一個(gè)windows完成端口對象,該對象通過指定數(shù)量的線程,對重疊I/O請求進(jìn)行

10、管理,以便為已經(jīng)完成的重疊I/O請求提供服務(wù)。 本次實(shí)驗(yàn)采用了WSAAsyncSelect模型,對于這個(gè)簡單的聊天室這樣重于消息映射的程序很適合。它允許應(yīng)用程序以WINDOWS消息的形式接受網(wǎng)絡(luò)事件通知,對性能要求不高的應(yīng)用程序都采用了WSAAsyncSelect模型,MFC中的Csocket類也使用了它。異步模型 I/O如下圖:2.3 開發(fā)環(huán)境及技術(shù)2.3.1開發(fā)環(huán)境硬件系統(tǒng):奔騰100以上CPU、64M以上內(nèi)存、1G以上硬盤、光驅(qū)。軟件系統(tǒng):Windows 9x或更高版本、Visual C+ 6.0中文版、SQL2000數(shù)據(jù)庫。2.3.2開發(fā)技術(shù)簡介微軟公司(Microsoft)的VC+

11、6.0是Windows應(yīng)用程序開發(fā)工具,是目前最為廣泛的、易學(xué)易用的面向?qū)ο蟮年P(guān)系型開發(fā)工具。 VC+ 6.0提供了大量的控件,這些控件可用于設(shè)計(jì)界面和實(shí)現(xiàn)各種功能,減少了編程人員的工作量,也簡化了界面設(shè)計(jì)過程,從而有效的提高了應(yīng)用程序的開發(fā)效率、運(yùn)行效率和可靠性。故而,實(shí)現(xiàn)本系統(tǒng),VC+ 6.0是一個(gè)相對較好的選擇。VC+ 6.0是較流行的開發(fā)工具,一直被不同層次的程序員用于設(shè)計(jì)和開發(fā)各種類型的管理信息系統(tǒng)或進(jìn)行網(wǎng)絡(luò)設(shè)計(jì)。最大特點(diǎn)就是易學(xué)、高效、功能強(qiáng)大,能匯集各種信息以供查詢、存儲和檢索,特別適用于中小型系統(tǒng)的管理設(shè)計(jì)。SQL SERVER 2000數(shù)據(jù)庫環(huán)境為本次課程設(shè)計(jì)提供了數(shù)據(jù)存儲與

12、管理的功能,可以刪除、修改、查詢表等多種操作,為編程人員提供了不可或缺的信息。3 系統(tǒng)設(shè)計(jì)3.1系統(tǒng)需求分析1) 系統(tǒng)目標(biāo):網(wǎng)上聊天系統(tǒng)是為人們之間進(jìn)行交流和聯(lián)系提供的一個(gè)平臺。通過提供完善的網(wǎng)上聊天系統(tǒng)服務(wù),可以達(dá)到增進(jìn)彼此之間的了解,增進(jìn)人與人之間的感情交流。2) 系統(tǒng)功能簡介:此系統(tǒng)是以用戶為中心的人性化設(shè)計(jì),總體來看,系統(tǒng)可以看作是用戶模塊和注冊模塊兩大模塊的協(xié)調(diào)運(yùn)作。3) 用戶登陸功能:用戶通過提交用戶名稱和用戶密碼進(jìn)行登陸,系統(tǒng)便會根據(jù)這些登陸資料,辨別出用戶是否存在。4) 聊天室功能:聊天室中將顯示用戶留的信息,及當(dāng)前在線的用戶。3.2系統(tǒng)的功能設(shè)計(jì)3.2.1系統(tǒng)的功能結(jié)構(gòu)該聊天

13、管理系統(tǒng)可以在Windows 2000 Server操作系統(tǒng)平臺上運(yùn)行,采用技術(shù)VC+6.0、數(shù)據(jù)庫服務(wù)器為SQL server 2000數(shù)據(jù)庫.用戶登錄通過判斷,合法登錄后可以在聊天室留下你想說的話。3.2.2系統(tǒng)的功能特點(diǎn)1).操作簡單、界面簡潔:完全控件式的頁面布局2).即時(shí)可見:對用戶的留言將立即在主頁的對應(yīng)欄目顯示出來,達(dá)到即時(shí)見效的功能3).需要連接服務(wù)器才能進(jìn)入聊天室發(fā)言。4)顯示當(dāng)前在線的用戶。4 系統(tǒng)詳細(xì)設(shè)計(jì)4.1 數(shù)據(jù)庫設(shè)計(jì)4.1.1創(chuàng)建數(shù)據(jù)庫源名(DSN) ADODB通過ODBC工作,因此要在ODBC中設(shè)置DSN(數(shù)據(jù)源名)。打開Windows的控制面板,雙擊ODBC的圖

14、標(biāo),然后選擇文件 DSN 的屬性頁,單擊,選擇數(shù)據(jù)庫驅(qū)動程序,然后單擊下一步,按照屏幕的指示鍵入數(shù)據(jù)源文件的名稱,然后單擊;下一步,再單擊完成創(chuàng)建數(shù)據(jù)源。2.創(chuàng)建數(shù)據(jù)庫鏈接 鏈接用以保持一些關(guān)于正在訪問的數(shù)據(jù)的動態(tài)信息,以及鏈接者信息。利用ADODB的成員函數(shù)Open和先前設(shè)定的DSN與數(shù)據(jù)庫連接,其語法如下: SetConnect=Server.CreateObject(ADODB.Connection) 創(chuàng)建了鏈接對象Connect。 Connect.Open(DSN=dsnname;UID=userID;PWD=password) 打開鏈接。dsnname為數(shù)據(jù)源名;userID為用戶名

15、;password為用戶口令。3.創(chuàng)建數(shù)據(jù)對象 ADO中的數(shù)據(jù)對象通常保存的是查詢結(jié)果。RecordSet 是ADO中最復(fù)雜的對象,有許多屬性和方法,靈活運(yùn)用,可以達(dá)到許多好的效果。其創(chuàng)建方法如下: Set RecordSet =Connect.Execute(sqtStr) 創(chuàng)建并打開了對象RecordSet ,sqtStr是一個(gè)串,代表一條標(biāo)準(zhǔn)的SQL語句。例如: sqlStr=SELECT*FROM b1 Set RecordSet =Connect.Execute(sqlStr) 這條語句執(zhí)行后,對象RecordSet中就保存了b1中的所有記錄。 4.操作數(shù)據(jù)庫 可利用Execute方

16、便地執(zhí)行數(shù)據(jù)的插入、修改、刪除等操作。如執(zhí)行插入操作: sqlStr=Insert Into b1Values(1,2) Connect.Execute(sqlStr)5.關(guān)閉數(shù)據(jù)對象和鏈接在使用了ADO對象之后,一定要關(guān)閉數(shù)據(jù)對象和鏈接。在ASP中通過調(diào)用方法close實(shí)現(xiàn)關(guān)閉。 關(guān)閉創(chuàng)建的數(shù)據(jù)對象:Record Set .close Set Record Set=Nothing 關(guān)閉創(chuàng)建的鏈接對象:Connect. close Set Connect=Nothing 完整的程序片段SetConnect=Server.CreateObject(ADODB.Connection)產(chǎn)生組件實(shí)例C

17、onnect.Open(DSN=dsnname;UID=userID;PWD=password)連接數(shù)據(jù)庫 SQL=selectfromtablename SetRS=Connect.Execute(SQL)執(zhí)行查詢 顯示結(jié)果 上述是用ASP訪問數(shù)據(jù)庫的全過程,由于應(yīng)用面向?qū)ο笏枷?,所有操作都比較簡單。4.1.2 數(shù)據(jù)庫的構(gòu)成 本聊天室系統(tǒng)的數(shù)據(jù)庫主要有4張表格所構(gòu)成:1 IP地址數(shù)據(jù)表英文字段名數(shù)據(jù)類型字段大小必須有數(shù)據(jù)允許零長度備注Ipaddress文本48否是tuxiang數(shù)字否是2.聊友黑名單數(shù)據(jù)表(badfriend)字段名數(shù)據(jù)類型字段大小必須有數(shù)據(jù)允許零長度備注識別碼自動編號長整型

18、否是主索引f_no數(shù)字長整型否是默認(rèn)0f_name文本12否是f_badno數(shù)字長整型否是0f_badfriend文本12否是3.聊天室參數(shù)數(shù)據(jù)表(chatroom)表略(有22種各種屬性、聊天室編號為主索引)4.好友名單數(shù)據(jù)表(friend) 字段名數(shù)據(jù)類型字段大小必須有數(shù)據(jù)允許零長度備注識別碼自動編號長整型否是主索引f_no數(shù)字長整型否是默認(rèn)0f_name文本12否是f_goodno數(shù)字長整型否是0f_goodfriend文本12否是4.2服務(wù)器端設(shè)計(jì)核心代碼在CserverDoc類中,有一個(gè)SOCKET變量m_psocket和SOCKET 數(shù)組m_lcount(客戶端所定義的接受連接客戶

19、的最大數(shù)目),m_psocket用來在指定的端口(1000)進(jìn)行偵聽,如果有客戶端請求連接,則在m_lcount數(shù)組中查找一個(gè)空socket,與指定的本地端口綁定bind(),就可以在端口進(jìn)行偵聽listen().每當(dāng)一個(gè)ClientSocket 接受到信息,都將會向窗口發(fā)一條信息,程序接受到這個(gè)信息后,再把接收的信息發(fā)送給每一個(gè)ClientSocket.讓后登錄成功的客戶就可以在服務(wù)器上聊天了。(具體設(shè)計(jì)代碼略)(1)服務(wù)器上設(shè)置的基本信息顯示內(nèi)容如圖:(2)服務(wù)器簡單消息保存功能:(保存信息后服務(wù)器關(guān)閉)(3)服務(wù)器中清除聊天室人員功能設(shè)計(jì)如圖:4.3客戶端設(shè)計(jì)客戶端比較簡單,核心代碼在CclientDlg類中,只有一個(gè)SOCKET 變量m_psoket,與服務(wù)器端進(jìn)行連接。連接建立好后,通過此SOCKET 發(fā)送和接收信息。為了簡化設(shè)計(jì),用戶名在客戶端控制,服務(wù)器端只進(jìn)行簡單的接收信息和“廣播”此信息,客戶端程序相對簡單,但是已經(jīng)具備了聊天室的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論