2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

用WINSOCK實現聊天室的VC++程序設計

 昵稱5435315 2011-01-15
發(fā)信人: noback (Time), 信區(qū): VisualC
標  題: 用WINSOCK實現聊天室的VC++程序設計
發(fā)信站: 幽幽黃桷蘭 (2003年01月12日17:20:50 星期天), 站內信件

用WINSOCK實現聊天室的VC++程序設計
 一:SOCKET簡介
80年代初,美國政府的高級研究工程機構(ARPA)給加利福尼亞大學Berkeley分校
提供了資金,讓他們在UNIX操作系統(tǒng)下實現TCP/IP協(xié)議。在這個項目中,研究人員
為TCP/IP網絡通信開發(fā)了一個API(應用程序接口)。這個API稱為Socket接口(套接字
)。
今天,SOCKET接口是TCP/IP網絡最為通用的API,也是在INTERNET上進行應用開發(fā)
最為通用的API。
90年代初,由Microsoft聯合了其他幾家公司共同制定了一套WINDOWS下的網絡編程
接口,即WindowsSockets規(guī)范。它是BerkeleySockets的重要擴充,主要是增加了一
些異步函數,并增加了符合Windows消息驅動特性的網絡事件異步選擇機制。
WINDOWSSOCKETS規(guī)范是一套開放的、支持多種協(xié)議的Windows下的網絡編程接口。
從1991年的1.0版到1995年的2.0.8版,經過不斷完善并在Intel、Microsoft、Sun、
SGI、Informix、Novell等公司的全力支持下,已成為Windows網絡編程的事實上的
標準。目前,在實際應用中的WINDOWSSOKCETS規(guī)范主要有1.1版和2.0版。兩者的最
重要區(qū)別是1.1版只支持TCP/IP協(xié)議,而2.0版可以支持多協(xié)議。2.0版有良好的向后
兼容性,任何使用1.1版的源代碼,二進制文件,應用程序都可以不加修改地在2.0
規(guī)范下使用。
SOCKET實際在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有SOCKET

接口的計算機通信。應用程序在網絡上傳輸,接收的信息都通過這個SOCKET接口來實
現。在應用開發(fā)中就像使用文件句柄一樣,可以對SOCKET句柄進行讀,寫操作。
二:基于WINDOWS SOCKET的應用開發(fā)介紹。
在WINDOWS95/98,WINDOWSNT進行WINSOCK開發(fā)使用的編程語言有很多,VC++,JAVA,
DELPHI,VB等。其中VC時使用最普遍,和WINSOCK結合最緊密的。并且VC++對原來的
WindowsSockets庫函數進行了一系列封裝,繼而產生了CAsynSocket、CSocket、
CSocketFile等類,它們封裝著有關Socket的各種功能,是編程變得更加簡單。
但如果你是一個WINSOCK編程的初學者,那么建議你在一開始還是學習WINSOCK最基
本的API函數進行編程,這樣可以大大加深對WINSOCK的了解,對將來很有好處。
在VC中進行WINSOCK的API編程開發(fā),需要使用到下面三個文件:
1 WINSOCK.H: 這是WINSOCK API的頭文件。
2 WSOCK32.LIB: WINSOCK API連接庫文件。在使用中,一點要把它作為項目的非
缺省的連接庫包含到項目文件中去。
3 WINSOCK.DLL: WINSOCK的動態(tài)連接庫,位于WINDOWS的安裝目錄下。
WINSOCK接口在WINDOWS編程環(huán)境中的位置如下圖所示:
==================
==================
可以看到,WINSOCK。DLL位于TCP/IP協(xié)議棧和應用程序之間。也就是說,WINSOCK管理
與TCP/IP協(xié)議的接口。在一開始WINSOCK的應有開發(fā)時,你不必對TCP/IP協(xié)議有很深刻
的了解。但是,如果想成為一個為網絡編程的高手,就一定要對下層了解得十分清楚。

在網絡編程中最常用的方案便是客戶機/服務器模型。在這種方案中客戶應用程序向服
務器程序請求服務。一個服務程序通常在一個眾所周知的地址監(jiān)聽對服務的請求,也
就是說,服務進程一直處于休眠狀態(tài),直到一個客戶對這個服務的地址提出了連接請
求。在這個時刻,服務程序被“驚醒”并且為客戶提供服務-對客戶的請求作出適當的

反應。雖然基于連接協(xié)議(流套接字)的服務是設計客戶機/服務器應用程序時的標準,

但有些服務也是可以通過無連接協(xié)議(數據報套接字)提供的。其編程模型分別如下:

面向連接協(xié)議的SOCKET編程模型================================
無連接協(xié)議的SOCKET編程模型================================ 一般在使用中,
面向連接協(xié)議的SOCKET編程模型應用最為廣泛,因為面向連接協(xié)議提供了一系列的數
據糾錯功能,可以保證在網絡上傳輸的數據及時、無誤地到達對方。 總的來說,使用
SOCKET接口(面向連接或無連接)進行網絡通信時,必須按下面簡單的四步進行處理:

1、程序必須建立一個 SOCKET。2、程序必須按要求配置此SOCKET。也就是說,程序要
么將此SOCKET連接到遠方的主機上,要么給此SOCKET指定一個本地協(xié)議端口。
3、程序必須按要求通過此SOCKET發(fā)送和接收數據。
4、程序必須關閉此SOCKET。
三:WINSOCK API主要函數簡介
作者利用WINSOCK API 編寫了一個具有聊天室功能的應用程序,可用作學習 WINSOCK
程序設計的參照。WINSOCK API 包括很多函數,但其中最常用,包括在文章所附源程序
中的有:
注:只是有關函數的簡要說明,具體規(guī)則、說明請參見VC++幫助和WINSOCK規(guī)范。
1、WSAStartup():連結應用程序與 Windows Sockets DLL 的第一個函數。
說明: 此函數是應用程序調用 Windows Sockets DLL函數中的第一個,也唯有此函數
呼叫成功後,才可以再調用其他 Windows Sockets DLL 的函數。
2、WSACleanup():結束 Windows Sockets DLL 的使用。
說明: 當應用程序不再需要使用 Windows Sockets DLL時,須調用此函數來注銷使用,

以便釋放其占用的資源。
3、 socket():建立Socket。
說明: 此函數用來建立一 Socket 描述字,并為此 Socket 建立其所使用的資源。
4、 closesocket():關閉某一Socket。
說明: 此一函數是用來關閉某一 Socket。
5、 bind():將一本地地址與一個SOCKET描述字連接在一起。
說明:此函數在服務程序上使用,是調用監(jiān)聽函數listen()必須要調用的函數。
6、 listen():設定 Socket 為監(jiān)聽狀態(tài),準備被連接。
說明: 此函數在服務程序上使用,來設定 Socket 進入監(jiān)聽狀態(tài),并設定最多可有多少

個在未真正完成連接前的客戶端的連接要求。(目前最大值限制為 5, 最
小值為1)
7、 accept():接受某一Socket的連接要求,以完成面向連接的客戶端 Socket 的連接
請求。
說明: 服務端應用程序調用此函數來接受客戶端Socket 連接請求,accept() 函數的返

回值為一新的 Socket,新 Socket 就可用來在服務端和客戶端之間的信息傳遞接收,而

原來 Socket 仍然可以接收其他客戶端的連接要求。
8、 connect():要求連接某一Socket到指定的網絡上服務端。
說明: 此函數用在客戶端,用來向服務端要求建立連接。當連接建立完成後,客戶端
即可利用此 Socket 來與服務端進行信息傳遞。
9、 recv():從面向連接的 Socket 接收信息。
說明: 此函數用來從面向連接的 Socket 接收信息。
10、send():使用面向連接的 Socket 發(fā)送信息。
說明: 此函數用來從面向連接的 Socket 發(fā)送信息。
11、WSAAsyncSelect():要求某一 Socket 有事件 (event) 發(fā)生時通知使用者。
說明: 此函數用來請求Windows Sockets DLL 為窗口句柄發(fā)一條消息-無論它何時
檢測到由lEvent參數指明的網絡事件。要發(fā)送的消息由wMsg參數標明.被通知的套接
口由s標識。本函數自動將套接口設置為非阻塞模式。
lEvent參數由下表中列出的值組成。
值 意義
FD_READ 欲接收讀準備好的通知。
FD_WRITE 欲接收寫準備好的通知。
FD_OOB 欲接收帶邊數據到達的通知。
FD_ACCEPT 欲接收將要連接的通知。
FD_CONNECT 欲接收已連接好的通知。
FD_CLOSE 欲接收套接口關閉的通知。
這個函數可以認為是 WINSOCK API 中最為重要的一個函數。要想使用好這個函
數,你必須對 WINDOWS 編程的事件驅動和消息傳遞有很清楚的了解。
四:聊天室應用程序的設計說明:
軟件功能:
Internet上可以提供一種叫IRC 的服務。使用者通過客戶端的程序登錄到IRC服務
器上,就可以與登錄在同一IRC服務器上的客戶進行交談,這也就是平常所說的聊天
室。在這里,給出了一個在運行TCP/IP協(xié)議的網絡上實現IRC服務的程序。
軟件使用說明:
首先,在一臺計算機上運行服務端程序,然后就可以在同一網絡的其他計算機上運
行客戶端程序,登錄到服務器上,各個客戶之間就可以聊天了。
軟件設計要點:
1、服務端
核心代碼在 CServerViwe 類中,有一個 SOCKET 變量 m_hServerSocket 和 SOCKET
數組 m_aClientSocket[MAXClient](MAXClient:所定義的接收連接客戶的最大數目)

,m_hServerSocket 用來在指定的端口(>1000)進行偵聽,如果有客戶端請求連接,則
在 m_aClientSocket 數組中查找一個空 socket,將客戶端的地址賦予此 socket。
每當一個 ClientSocket 接收到信息,都將會向窗口發(fā)一條消息。程序接收到這個消
息后,再把接收到的信息發(fā)送給每一個 ClientSocket。
2、客戶端
客戶端比較簡單,核心代碼在 CClientDlg 類中。只有一個 socket 變量 m_hSocket,

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

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多