

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> VC++程序設(shè)計(jì) 用WINSOCK實(shí)現(xiàn)聊天</p><p> 一:SOCKET簡(jiǎn)介</p><p> SOCKET實(shí)際在計(jì)算機(jī)中提供了一個(gè)通信端口,可以通過(guò)這個(gè)端口與任何一個(gè)具有SOCKET接口的計(jì)算機(jī)通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接收的信息都通過(guò)這個(gè)SOCKET接口來(lái)實(shí)現(xiàn)。在應(yīng)用開發(fā)中就像使用文件句柄一樣,可以對(duì)SOCKET句柄進(jìn)行讀,寫操作。</p&g
2、t;<p> 二:基于WINDOWS SOCKET的應(yīng)用開發(fā)介紹。</p><p> 在WINDOWS95/98,WINDOWSNT進(jìn)行WINSOCK開發(fā)使用的編程語(yǔ)言有很多,VC++,JAVA,DELPHI,VB等。其中VC時(shí)使用最普遍,和WINSOCK結(jié)合最緊密的。并且VC++對(duì)原來(lái)的WindowsSockets庫(kù)函數(shù)進(jìn)行了一系列封裝,繼而產(chǎn)生了CAsynSocket、CSocket、CSo
3、cketFile等類,它們封裝著有關(guān)Socket的各種功能,是編程變得更加簡(jiǎn)單。但如果你是一個(gè)WINSOCK編程的初學(xué)者,那么建議你在一開始還是學(xué)習(xí)WINSOCK最基本的API函數(shù)進(jìn)行編程,這樣可以大大加深對(duì)WINSOCK的了解,對(duì)將來(lái)很有好處。</p><p> 在VC中進(jìn)行WINSOCK的API編程開發(fā),需要使用到下面三個(gè)文件:</p><p> 1 WINSOCK.H: 這是WI
4、NSOCK API的頭文件。</p><p> 2 WSOCK32.LIB: WINSOCK API連接庫(kù)文件。在使用中,一點(diǎn)要把它作為項(xiàng)目的非缺省的連接庫(kù)包含到項(xiàng)目文件中去。</p><p> 3 WINSOCK.DLL: WINSOCK的動(dòng)態(tài)連接庫(kù),位于WINDOWS的安裝目錄下。</p><p> WINSOCK接口在WINDOWS編程環(huán)境中的位置如下圖
5、所示:</p><p> ==================</p><p> ==================</p><p> 可以看到,WINSOCK。DLL位于TCP/IP協(xié)議棧和應(yīng)用程序之間。也就是說(shuō),WINSOCK管理與TCP/IP協(xié)議的接口。在一開始WINSOCK的應(yīng)有開發(fā)時(shí),你不必對(duì)TCP/IP協(xié)議有很深刻的了解。但是,如果想成為一個(gè)為網(wǎng)
6、絡(luò)編程的高手,就一定要對(duì)下層了解得十分清楚。</p><p> 在網(wǎng)絡(luò)編程中最常用的方案便是客戶機(jī)/服務(wù)器模型。在這種方案中客戶應(yīng)用程序向服務(wù)器程序請(qǐng)求服務(wù)。一個(gè)服務(wù)程序通常在一個(gè)眾所周知的地址監(jiān)聽對(duì)服務(wù)的請(qǐng)求,也就是說(shuō),服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶對(duì)這個(gè)服務(wù)的地址提出了連接請(qǐng)求。在這個(gè)時(shí)刻,服務(wù)程序被“驚醒”并且為客戶提供服務(wù)-對(duì)客戶的請(qǐng)求作出適當(dāng)?shù)姆磻?yīng)。雖然基于連接協(xié)議(流套接字)的服務(wù)是設(shè)計(jì)客戶
7、機(jī)/服務(wù)器應(yīng)用程序時(shí)的標(biāo)準(zhǔn),但有些服務(wù)也是可以通過(guò)無(wú)連接協(xié)議(數(shù)據(jù)報(bào)套接字)提供的。其編程模型分別如下:</p><p> 面向連接協(xié)議的SOCKET編程模型================================</p><p> 無(wú)連接協(xié)議的SOCKET編程模型================================ 一般在使用中,面向連接協(xié)議的SO
8、CKET編程模型應(yīng)用最為廣泛,因?yàn)槊嫦蜻B接協(xié)議提供了一系列的數(shù)據(jù)糾錯(cuò)功能,可以保證在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)及時(shí)、無(wú)誤地到達(dá)對(duì)方。 總的來(lái)說(shuō),使用SOCKET接口(面向連接或無(wú)連接)進(jìn)行網(wǎng)絡(luò)通信時(shí),必須按下面簡(jiǎn)單的四步進(jìn)行處理:1、程序必須建立一個(gè) SOCKET。2、程序必須按要求配置此SOCKET。也就是說(shuō),程序要么將此SOCKET連接到遠(yuǎn)方的主機(jī)上,要么給此SOCKET指定一個(gè)本地協(xié)議端口。</p><p&g
9、t; 3、程序必須按要求通過(guò)此SOCKET發(fā)送和接收數(shù)據(jù)。</p><p> 4、程序必須關(guān)閉此SOCKET。</p><p> 三:WINSOCK API主要函數(shù)簡(jiǎn)介</p><p> 作者利用WINSOCK API 編寫了一個(gè)具有聊天室功能的應(yīng)用程序,可用作學(xué)習(xí) WINSOCK 程序設(shè)計(jì)的參照。WINSOCK API 包括很多函數(shù),但其中最常用,包括在文
10、章所附源程序中的有:</p><p> 注:只是有關(guān)函數(shù)的簡(jiǎn)要說(shuō)明,具體規(guī)則、說(shuō)明請(qǐng)參見(jiàn)VC++幫助和WINSOCK規(guī)范。</p><p> 1、WSAStartup():連結(jié)應(yīng)用程序與 Windows Sockets DLL 的第一個(gè)函數(shù)。</p><p> 說(shuō)明: 此函數(shù)是應(yīng)用程序調(diào)用 Windows Sockets DLL函數(shù)中的第一個(gè),也唯有此函數(shù)呼叫
11、成功後,才可以再調(diào)用其他 Windows Sockets DLL 的函數(shù)。</p><p> 2、WSACleanup():結(jié)束 Windows Sockets DLL 的使用。</p><p> 說(shuō)明: 當(dāng)應(yīng)用程序不再需要使用 Windows Sockets DLL時(shí),須調(diào)用此函數(shù)來(lái)注銷使用,以便釋放其占用的資源。</p><p> 3、 socket()
12、:建立Socket。</p><p> 說(shuō)明: 此函數(shù)用來(lái)建立一 Socket 描述字,并為此 Socket 建立其所使用的資源。</p><p> 4、 closesocket():關(guān)閉某一Socket。</p><p> 說(shuō)明: 此一函數(shù)是用來(lái)關(guān)閉某一 Socket。</p><p> 5、 bind():將一本地地址與一個(gè)
13、SOCKET描述字連接在一起。</p><p> 說(shuō)明:此函數(shù)在服務(wù)程序上使用,是調(diào)用監(jiān)聽函數(shù)listen()必須要調(diào)用的函數(shù)。</p><p> 6、 listen():設(shè)定 Socket 為監(jiān)聽狀態(tài),準(zhǔn)備被連接。</p><p> 說(shuō)明: 此函數(shù)在服務(wù)程序上使用,來(lái)設(shè)定 Socket 進(jìn)入監(jiān)聽狀態(tài),并設(shè)定最多可有多少個(gè)在未真正完成連接前的客戶端的連接要
14、求。(目前最大值限制為 5, 最</p><p><b> 小值為1)</b></p><p> 7、 accept():接受某一Socket的連接要求,以完成面向連接的客戶端 Socket 的連接請(qǐng)求。</p><p> 說(shuō)明: 服務(wù)端應(yīng)用程序調(diào)用此函數(shù)來(lái)接受客戶端Socket 連接請(qǐng)求,accept() 函數(shù)的返回值為一新的 Soc
15、ket,新 Socket 就可用來(lái)在服務(wù)端和客戶端之間的信息傳遞接收,而原來(lái) Socket 仍然可以接收其他客戶端的連接要求。</p><p> 8、 connect():要求連接某一Socket到指定的網(wǎng)絡(luò)上服務(wù)端。</p><p> 說(shuō)明: 此函數(shù)用在客戶端,用來(lái)向服務(wù)端要求建立連接。當(dāng)連接建立完成後,客戶端即可利用此 Socket 來(lái)與服務(wù)端進(jìn)行信息傳遞。</p>
16、<p> 9、 recv():從面向連接的 Socket 接收信息。</p><p> 說(shuō)明: 此函數(shù)用來(lái)從面向連接的 Socket 接收信息。</p><p> 10、send():使用面向連接的 Socket 發(fā)送信息。</p><p> 說(shuō)明: 此函數(shù)用來(lái)從面向連接的 Socket 發(fā)送信息。</p><p> 11
17、、WSAAsyncSelect():要求某一 Socket 有事件 (event) 發(fā)生時(shí)通知使用者。</p><p> 說(shuō)明: 此函數(shù)用來(lái)請(qǐng)求Windows Sockets DLL 為窗口句柄發(fā)一條消息-無(wú)論它何時(shí)檢測(cè)到由lEvent參數(shù)指明的網(wǎng)絡(luò)事件。要發(fā)送的消息由wMsg參數(shù)標(biāo)明.被通知的套接口由s標(biāo)識(shí)。本函數(shù)自動(dòng)將套接口設(shè)置為非阻塞模式。</p><p> lEvent參數(shù)由下
18、表中列出的值組成。</p><p> 值 意義</p><p> FD_READ 欲接收讀準(zhǔn)備好的通知。</p><p> FD_WRITE 欲接收寫準(zhǔn)備好的通知。</p><p> FD_OOB 欲接收帶邊數(shù)據(jù)到達(dá)的通知。</p><p> FD_ACCE
19、PT 欲接收將要連接的通知。</p><p> FD_CONNECT 欲接收已連接好的通知。</p><p> FD_CLOSE 欲接收套接口關(guān)閉的通知。</p><p> 這個(gè)函數(shù)可以認(rèn)為是 WINSOCK API 中最為重要的一個(gè)函數(shù)。要想使用好這個(gè)函數(shù),你必須對(duì) WINDOWS 編程的事件驅(qū)動(dòng)和消息傳遞有很清楚的了解。</p>
20、<p> 四:聊天室應(yīng)用程序的設(shè)計(jì)說(shuō)明:</p><p><b> 軟件功能:</b></p><p> Internet上可以提供一種叫IRC 的服務(wù)。使用者通過(guò)客戶端的程序登錄到IRC服務(wù)器上,就可以與登錄在同一IRC服務(wù)器上的客戶進(jìn)行交談,這也就是平常所說(shuō)的聊天室。在這里,給出了一個(gè)在運(yùn)行TCP/IP協(xié)議的網(wǎng)絡(luò)上實(shí)現(xiàn)IRC服務(wù)的程序。</p
21、><p><b> 軟件使用說(shuō)明:</b></p><p> 首先,在一臺(tái)計(jì)算機(jī)上運(yùn)行服務(wù)端程序,然后就可以在同一網(wǎng)絡(luò)的其他計(jì)算機(jī)上運(yùn)行客戶端程序,登錄到服務(wù)器上,各個(gè)客戶之間就可以聊天了。</p><p><b> 軟件設(shè)計(jì)要點(diǎn):</b></p><p><b> 1、服務(wù)端<
22、/b></p><p> 核心代碼在 CServerViwe 類中,有一個(gè) SOCKET 變量 m_hServerSocket 和 SOCKET 數(shù)組 m_aClientSocket[MAXClient](MAXClient:所定義的接收連接客戶的最大數(shù)目),m_hServerSocket 用來(lái)在指定的端口(>1000)進(jìn)行偵聽,如果有客戶端請(qǐng)求連接,則在 m_aClientSocket 數(shù)組中查找
23、一個(gè)空 socket,將客戶端的地址賦予此 socket。</p><p> 每當(dāng)一個(gè) ClientSocket 接收到信息,都將會(huì)向窗口發(fā)一條消息。程序接收到這個(gè)消息后,再把接收到的信息發(fā)送給每一個(gè) ClientSocket。</p><p><b> 2、客戶端</b></p><p> 客戶端比較簡(jiǎn)單,核心代碼在 CClientDl
24、g 類中。只有一個(gè) socket 變量 m_hSocket,與服務(wù)端進(jìn)行連接。連接建立好后,通過(guò)此 SOCKET 發(fā)送和接收信息。</p><p> 為了簡(jiǎn)化設(shè)計(jì),用戶名在客戶端控制,服務(wù)器端只進(jìn)行簡(jiǎn)單的接收信息和“廣播”此信息,不進(jìn)行名字校驗(yàn),也就是說(shuō),可以有同名客戶登錄到服務(wù)端。這個(gè)程序設(shè)計(jì)雖然簡(jiǎn)單,但是已經(jīng)具備了聊天室的最基本的功能。</p><p> 程序在VC++ 6.0 下
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-- 用winsock實(shí)現(xiàn)聊天室的vc++程序設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-- 用winsock實(shí)現(xiàn)聊天室的vc++程序設(shè)計(jì)
- vc++網(wǎng)絡(luò)聊天軟件課程設(shè)計(jì)
- 用vc++簡(jiǎn)單的多線程聊天室課程設(shè)計(jì)
- vc++課程設(shè)計(jì)--聊天室程序設(shè)計(jì)
- vc++課程設(shè)計(jì)報(bào)告
- vc++面向?qū)ο笳n程設(shè)計(jì)報(bào)告---局域網(wǎng)聊天程序
- vc++網(wǎng)絡(luò)聊天室的實(shí)現(xiàn)計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--用vc++實(shí)現(xiàn)俄羅斯方塊的程序設(shè)計(jì)
- 課程設(shè)計(jì)---用vc++實(shí)現(xiàn)俄羅斯方塊的程序設(shè)計(jì)
- vc++軟件課程設(shè)計(jì)報(bào)告
- vc++庫(kù)函數(shù)課程設(shè)計(jì)
- vc++課程設(shè)計(jì)報(bào)告----對(duì)抗游戲
- vc++課程設(shè)計(jì)-- 餐飲管理系統(tǒng)
- vc++課程設(shè)計(jì)--工資管理
- vc++課程設(shè)計(jì)報(bào)告--對(duì)抗游戲
- vc++課程設(shè)計(jì)--工資管理
- vc++課設(shè)課程設(shè)計(jì)報(bào)告
- vc++課程設(shè)計(jì)報(bào)告---球員管理系統(tǒng)
- VC++課程設(shè)計(jì)--工資管理.doc
評(píng)論
0/150
提交評(píng)論