計算機網(wǎng)絡課程設(shè)計-- 用winsock實現(xiàn)聊天室的vc++程序設(shè)計_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計</b></p><p><b>  ——《計算機網(wǎng)絡》</b></p><p>  學生姓名: </p><p>  學 號: </p><p>  專業(yè)班級:計算機2093班</p><

2、p>  指導老師: </p><p>  用WINSOCK實現(xiàn)聊天室的VC++程序設(shè)計</p><p>  摘 要:WINSOCK 是在Windows進行網(wǎng)絡通信編程的API接口,也是Windws網(wǎng)絡編程的事實標準。在網(wǎng)絡編程中最常用的方案便是客戶機/服務器模型。本文提出了在客戶機/服務器模型下用WINSOCK實現(xiàn)Internet中常見的聊天室軟件的方案。&l

3、t;/p><p>  關(guān)鍵詞:套接字,WINSOCK,客戶機/服務器,網(wǎng)絡編程</p><p>  一:SOCKET簡介</p><p>  80年代初,美國政府的高級研究工程機構(gòu)(ARPA)給加利福尼亞大學Berkeley分校提供了資金,讓他們在UNIX操作系統(tǒng)下實現(xiàn)TCP/IP協(xié)議。在這個項目中,研究人員為TCP/IP網(wǎng)絡通信開發(fā)了一個API(應用程序接口)。這個A

4、PI稱為Socket接口(套接字)。今天,SOCKET接口是TCP/IP網(wǎng)絡最為通用的API,也是在INTERNET上進行應用開發(fā)最為通用的API。</p><p>  90年代初,由Microsoft聯(lián)合了其他幾家公司共同制定了一套WINDOWS下的網(wǎng)絡編程接口,即WindowsSockets規(guī)范。它是BerkeleySockets的重要擴充,主要是增加了一些異步函數(shù),并增加了符合Windows消息驅(qū)動特性的網(wǎng)

5、絡事件異步選擇機制。WINDOWSSOCKETS規(guī)范是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡編程接口。從1991年的1.0版到1995年的2.0.8版,經(jīng)過不斷完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成為Windows網(wǎng)絡編程的事實上的標準。目前,在實際應用中的WINDOWSSOKCETS規(guī)范主要有1.1版和2.0版。兩者的最重要區(qū)別是1.1版只支持TCP/I

6、P協(xié)議,而2.0版可以支持多協(xié)議。2.0版有良好的向后兼容性,任何使用1.1版的源代碼,二進制文件,應用程序都可以不加修改地在2.0規(guī)范下使用。</p><p>  SOCKET實際在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有SOCKET接口的計算機通信。應用程序在網(wǎng)絡上傳輸,接收的信息都通過這個SOCKET接口來實現(xiàn)。在應用開發(fā)中就像使用文件句柄一樣,可以對SOCKET句柄進行讀,寫操作。<

7、;/p><p>  二:基于WINDOWS SOCKET的應用開發(fā)介紹。</p><p>  在WINDOWS95/98,WINDOWSNT進行WINSOCK開發(fā)使用的編程語言有很多,VC++,JAVA,DELPHI,VB等。其中VC時使用最普遍,和WINSOCK結(jié)合最緊密的。并且VC++對原來的WindowsSockets庫函數(shù)進行了一系列封裝,繼而產(chǎn)生了CAsynSocket、CSocke

8、t、CSocketFile等類,它們封裝著有關(guān)Socket的各種功能,是編程變得更加簡單。但如果你是一個WINSOCK編程的初學者,那么建議你在一開始還是學習WINSOCK最基本的API函數(shù)進行編程,這樣可以大大加深對WINSOCK的了解,對將來很有好處。</p><p>  在VC中進行WINSOCK的API編程開發(fā),需要使用到下面三個文件:</p><p>  1 WINSOCK.H:

9、 這是WINSOCK API的頭文件。</p><p>  2 WSOCK32.LIB: WINSOCK API連接庫文件。在使用中,一點要把它作為項目的非缺省的連接庫包含到項目文件中去。</p><p>  3 WINSOCK.DLL: WINSOCK的動態(tài)連接庫,位于WINDOWS的安裝目錄下。</p><p>  可以看到,WINSOCK。DLL位于TCP/I

10、P協(xié)議棧和應用程序之間。也就是說,WINSOCK管理與TCP/IP協(xié)議的接口。在一開始WINSOCK的應有開發(fā)時,你不必對TCP/IP協(xié)議有很深刻的了解。但是,如果想成為一個為網(wǎng)絡編程的高手,就一定要對下層了解得十分清楚。</p><p>  在網(wǎng)絡編程中最常用的方案便是客戶機/服務器模型。在這種方案中客戶應用程序向服務器程序請求服務。一個服務程序通常在一個眾所周知的地址監(jiān)聽對服務的請求,也就是說,服務進程一直處

11、于休眠狀態(tài),直到一個客戶對這個服務的地址提出了連接請求。在這個時刻,服務程序被“驚醒”并且為客戶提供服務-對客戶的請求作出適當?shù)姆磻?。雖然基于連接協(xié)議(流套接字)的服務是設(shè)計客戶機/服務器應用程序時的標準,但有些服務也是可以通過無連接協(xié)議(數(shù)據(jù)報套接字)提供的。</p><p>  一般在使用中,面向連接協(xié)議的SOCKET編程模型應用最為廣泛,因為面向連接協(xié)議提供了一系列的數(shù)據(jù)糾錯功能,可以保證在網(wǎng)絡上傳輸?shù)臄?shù)據(jù)

12、及時、無誤地到達對方。 總的來說,使用SOCKET接口(面向連接或無連接)進行網(wǎng)絡通信時,必須按下面簡單的四步進行處理:1、程序必須建立一個 SOCKET。2、程序必須按要求配置此SOCKET。也就是說,程序要么將此SOCKET連接到遠方的主機上,要么給此SOCKET指定一個本地協(xié)議端口。</p><p>  3、程序必須按要求通過此SOCKET發(fā)送和接收數(shù)據(jù)。</p><p>  4、程

13、序必須關(guān)閉此SOCKET。</p><p>  三:WINSOCK API主要函數(shù)簡介</p><p>  作者利用WINSOCK API 編寫了一個具有聊天室功能的應用程序,可用作學習 WINSOCK 程序設(shè)計的參照。WINSOCK API 包括很多函數(shù),但其中最常用,包括在文章所附源程序中的有:</p><p>  注:只是有關(guān)函數(shù)的簡要說明,具體規(guī)則、說明請參

14、見VC++幫助和WINSOCK規(guī)范。</p><p>  1、WSAStartup():連結(jié)應用程序與 Windows Sockets DLL 的第一個函數(shù)。</p><p>  說明: 此函數(shù)是應用程序調(diào)用 Windows Sockets DLL函數(shù)中的第一個,也唯有此函數(shù)呼叫成功後,才可以再調(diào)用其他 Windows Sockets DLL 的函數(shù)。</p><p&g

15、t;  2、WSACleanup():結(jié)束 Windows Sockets DLL 的使用。</p><p>  說明: 當應用程序不再需要使用 Windows Sockets DLL時,須調(diào)用此函數(shù)來注銷使用,以便釋放其占用的資源。</p><p>  3、 socket():建立Socket。</p><p>  說明: 此函數(shù)用來建立一 Socket 描述字,

16、并為此 Socket 建立其所使用的資源。</p><p>  4、 closesocket():關(guān)閉某一Socket。</p><p>  說明: 此一函數(shù)是用來關(guān)閉某一 Socket。</p><p>  5、 bind():將一本地地址與一個SOCKET描述字連接在一起。</p><p>  說明:此函數(shù)在服務程序上使用,是調(diào)用監(jiān)聽函數(shù)

17、listen()必須要調(diào)用的函數(shù)。</p><p>  6、 listen():設(shè)定 Socket 為監(jiān)聽狀態(tài),準備被連接。</p><p>  說明: 此函數(shù)在服務程序上使用,來設(shè)定 Socket 進入監(jiān)聽狀態(tài),并設(shè)定最多可有多少個在未真正完成連接前的客戶端的連接要求。(目前最大值限制為 5, 最</p><p><b>  小值為1)</b>

18、;</p><p>  7、 accept():接受某一Socket的連接要求,以完成面向連接的客戶端 Socket 的連接請求。</p><p>  說明: 服務端應用程序調(diào)用此函數(shù)來接受客戶端Socket 連接請求,accept() 函數(shù)的返回值為一新的 Socket,新 Socket 就可用來在服務端和客戶端之間的信息傳遞接收,而原來 Socket 仍然可以接收其他客戶端的連接要求。

19、</p><p>  8、 connect():要求連接某一Socket到指定的網(wǎng)絡上服務端。</p><p>  說明: 此函數(shù)用在客戶端,用來向服務端要求建立連接。當連接建立完成後,客戶端即可利用此 Socket 來與服務端進行信息傳遞。</p><p>  9、 recv():從面向連接的 Socket 接收信息。</p><p>  

20、說明: 此函數(shù)用來從面向連接的 Socket 接收信息。</p><p>  10、send():使用面向連接的 Socket 發(fā)送信息。</p><p>  說明: 此函數(shù)用來從面向連接的 Socket 發(fā)送信息。</p><p>  11、WSAAsyncSelect():要求某一 Socket 有事件 (event) 發(fā)生時通知使用者。</p>

21、<p>  說明: 此函數(shù)用來請求Windows Sockets DLL 為窗口句柄發(fā)一條消息-無論它何時檢測到由lEvent參數(shù)指明的網(wǎng)絡事件。要發(fā)送的消息由wMsg參數(shù)標明.被通知的套接口由s標識。本函數(shù)自動將套接口設(shè)置為非阻塞模式。</p><p>  lEvent參數(shù)由下表中列出的值組成。</p><p><b>  值 意義</b></p&g

22、t;<p>  FD_READ 欲接收讀準備好的通知。</p><p>  FD_WRITE 欲接收寫準備好的通知。</p><p>  FD_OOB 欲接收帶邊數(shù)據(jù)到達的通知。</p><p>  FD_ACCEPT 欲接收將要連接的通知。</p><p>  FD_CONNECT 欲接收已連接好的通知。</p>

23、<p>  FD_CLOSE 欲接收套接口關(guān)閉的通知。</p><p>  這個函數(shù)可以認為是 WINSOCK API 中最為重要的一個函數(shù)。要想使用好這個函數(shù),你必須對 WINDOWS 編程的事件驅(qū)動和消息傳遞有很清楚的了解。</p><p>  四:聊天室應用程序的設(shè)計說明:</p><p><b>  軟件功能:</b><

24、;/p><p>  Internet上可以提供一種叫IRC 的服務。使用者通過客戶端的程序登錄到IRC服務器上,就可以與登錄在同一IRC服務器上的客戶進行交談,這也就是平常所說的聊天室。在這里,給出了一個在運行TCP/IP協(xié)議的網(wǎng)絡上實現(xiàn)IRC服務的程序。</p><p><b>  軟件使用說明:</b></p><p>  首先,在一臺計算機上

25、運行服務端程序,然后就可以在同一網(wǎng)絡的其他計算機上運行客戶端程序,登錄到服務器上,各個客戶之間就可以聊天了。</p><p><b>  軟件設(shè)計要點:</b></p><p><b>  1、服務端</b></p><p>  核心代碼在 CServerViwe 類中,有一個 SOCKET 變量 m_hServerSoc

26、ket 和 SOCKET 數(shù)組 m_aClientSocket[MAXClient](MAXClient:所定義的接收連接客戶的最大數(shù)目),m_hServerSocket 用來在指定的端口(>1000)進行偵聽,如果有客戶端請求連接,則在 m_aClientSocket 數(shù)組中查找一個空 socket,將客戶端的地址賦予此 socket。</p><p>  每當一個 ClientSocket 接收到信息,

27、都將會向窗口發(fā)一條消息。程序接收到這個消息后,再把接收到的信息發(fā)送給每一個 ClientSocket。</p><p><b>  2、客戶端</b></p><p>  客戶端比較簡單,核心代碼在 CClientDlg 類中。只有一個 socket 變量 m_hSocket,與服務端進行連接。連接建立好后,通過此 SOCKET 發(fā)送和接收信息。</p>

28、<p>  為了簡化設(shè)計,用戶名在客戶端控制,服務器端只進行簡單的接收信息和“廣播”此信息,不進行名字校驗,也就是說,可以有同名客戶登錄到服務端。這個程序設(shè)計雖然簡單,但是已經(jīng)具備了聊天室的最基本的功能。</p><p>  程序在VC++ 6.0 下編譯通過,在使用 TCP/IP 協(xié)議的 WINDOWS 95/98 對等局域網(wǎng) 和使用 TCP/IP 協(xié)議的 WINDOWS NT 局域網(wǎng)上運行良好。&

29、lt;/p><p><b>  ---- </b></p><p><b>  程序代碼:</b></p><p>  import java.applet.*; import java.awt.*; import java.io.*; import java.net.*; import java.awt.event.

30、*; public class ChatClient extends Applet{ protected boolean loggedIn;//登入狀態(tài) protected Frame cp;//聊天室框架 protected static int PORTNUM=7777; //缺省端口號7777 protected int port;//實際端口號 protected Socket sock; protected Bu

溫馨提示

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

評論

0/150

提交評論