




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、開發(fā)Windows Sockets通信應(yīng)用程序的經(jīng)驗與實踐一、引言套接字(Socket最初是由加利福尼亞大學(xué)Berkeley分校為UNIX操作系統(tǒng)開發(fā)的網(wǎng)絡(luò)通信接口,隨著UNIX操作系統(tǒng)的廣泛使用,套接字成為當前最流行的網(wǎng)絡(luò)通信應(yīng)用程序接口之一。90年代初,由Sun Microsystems,JSB Corporation,FTP software,Microdyne和Microsoft等幾家公司共同制定了一套標準,即Windows Sockets規(guī)范。Windows Sockets API是Microsoft Windows的網(wǎng)絡(luò)程序設(shè)計接口,它在繼承了Berkeley Sockets主要特
2、征的基礎(chǔ)上,又對它進行了重要擴充。這些擴充主要是提供了一些異步函數(shù),并增加了符合Windows消息驅(qū)動特性的網(wǎng)絡(luò)事件異步選擇機制。這些擴充有利于應(yīng)用程序開發(fā)者編制符合Windows編程模式的軟件,它使在Windows下開發(fā)高性能的網(wǎng)絡(luò)通信程序成為可能。Socket實際上是指一個通信端點,借助于它,用戶所開發(fā)的Socket應(yīng)用程序,可以通過網(wǎng)絡(luò)與其它Socket應(yīng)用程序進行通信。近年來,隨著計算機網(wǎng)絡(luò)與Windows 95的流行,許多用戶所開發(fā)的應(yīng)用程序需要實現(xiàn)網(wǎng)絡(luò)間的數(shù)據(jù)通信,在此,筆者根據(jù)在Windows 95環(huán)境下,利用Visual C+ 4.0進行Windows Sockets應(yīng)用程序的
3、開發(fā)經(jīng)驗,闡述一下有關(guān)網(wǎng)絡(luò)間數(shù)據(jù)通信程序的開發(fā)內(nèi)容。二、開發(fā)Windows Sockets網(wǎng)絡(luò)通信程序的軟、硬件環(huán)境所采用的操作系統(tǒng)軟件可以是Windows 95,也可以是Windows NT,因為它們都支持Windows Sockets API,在以下的介紹中,我們將以在Windows 95環(huán)境下的開發(fā)為例。所采用的編程語言一般可選目前較流行使用的可視化和采用面向?qū)ο蠹夹g(shù)的Microsoft Visual C+ 4.0。Visual C+ 4.0可在Windows 95或Windows NT 環(huán)境下運行,其開發(fā)系統(tǒng)增加了全面集成的基于Windows 的開發(fā)工具以及一個基于傳統(tǒng)C/C+開發(fā)過程
4、的“可視化”用戶界面驅(qū)動模型。Visual C+ 4.0中的Microsoft基類(MFC,即Microsoft Foundation Class庫是一系列C+類,其中封裝著為Microsoft Windows操作系統(tǒng)系列編寫應(yīng)用程序的各種功能。在有關(guān)套接字方面,Visual C+ 4.0對原來的Windows Sockets庫函數(shù)進行了一系列封裝,繼而產(chǎn)生了CSocket 、CSocketFile等類,它們封裝著有關(guān)Socket的各種功能。所采用的網(wǎng)絡(luò)通信協(xié)議一般是TCP / IP。Windows 95和Windows NT都帶有該協(xié)議。但是,所開發(fā)的網(wǎng)絡(luò)通信應(yīng)用程序并不能直接與TCP /
5、IP核心打交道,而是與網(wǎng)絡(luò)應(yīng)用編程界面Windows Sockets API打交道。Windows Sockets API則可直接與TCP/IP核心進行溝通。TCP / IP核心協(xié)議連同網(wǎng)絡(luò)物理介質(zhì)(如網(wǎng)卡一起,都是提供網(wǎng)絡(luò)應(yīng)用程序間相互通信的設(shè)施。其關(guān)系如圖1所示。網(wǎng)絡(luò)通信應(yīng)用程序Windows Sockets APITCP / IP核心協(xié)議物理介質(zhì)圖1 TCP / IP協(xié)議核心與網(wǎng)絡(luò)通信應(yīng)用程序關(guān)系圖在采用TCP / IP網(wǎng)絡(luò)協(xié)議的應(yīng)用中,各網(wǎng)絡(luò)節(jié)點計算機之上的Windows Sockets 網(wǎng)絡(luò)通信程序之間相互作用的主要模式為客戶 / 服務(wù)器(Client / Server 模式。即客戶
6、向服務(wù)器發(fā)出服務(wù)請求,服務(wù)器接收到請求后,提供相應(yīng)的服務(wù)。采用這種模式的網(wǎng)絡(luò)應(yīng)用程序在進行通信時,服務(wù)器方的網(wǎng)絡(luò)應(yīng)用程序需首先啟動,并打開一通信通道告知本地主機,它可以在某一公認地址上(保留端口,如文件傳送協(xié)議FTP為21接收客戶請求。而客戶方的網(wǎng)絡(luò)應(yīng)用程序隨后啟動,并打開一通信通道,連接到服務(wù)器所在主機的保留端口。圖2是客戶方的PC機1、PC機2和PC機3上的Windows Sockets通信程序,與服務(wù)器方的PC機0上的Windows Sockets通信程序,采用客戶 / 服務(wù)器模式進行通信的典型拓撲結(jié)構(gòu)。PC機0以太網(wǎng)交換機或集線器PC機1 PC機2 PC機3圖2 采用客戶/ 服務(wù)器模式
7、相互作用的Windows Sockets通信程序所采用的典型網(wǎng)絡(luò)拓撲結(jié)構(gòu)網(wǎng)絡(luò)中的所采用的計算機應(yīng)滿足Windows 95運行的配置要求。如果有條件,最好采用Pentium或其以上檔次的微機,將內(nèi)存配置到16MB,并采用1GB左右的硬盤。網(wǎng)絡(luò)中各節(jié)點上的計算機需安裝網(wǎng)卡,并通過Windows 95或其它途徑安裝上該網(wǎng)卡的驅(qū)動程序。此外,象圖2那樣的網(wǎng)絡(luò)若采用以太網(wǎng)交換機(SWITCH,需購買一臺帶有一個100Mbps端口和數(shù)個10Mbps端口的以太網(wǎng)交換機,如3COM公司的SWITCH 1000 ,并通過5類線(UTP將各計算機上的網(wǎng)卡連接入交換機中相應(yīng)的端口,即:將帶有100Mbps以太網(wǎng)卡的
8、PC 0接入100Mbps端口,將其它各計算機接入3個10Mbps 端口。在配置網(wǎng)絡(luò)時,首先應(yīng)通過Windows 95控制面板中的網(wǎng)絡(luò)配置項及Windows 95資源管理器中文件屬性共享性的設(shè)置,使各計算機節(jié)點能在“網(wǎng)上鄰居”中找到自己和其它各計算機,并能實現(xiàn)文件資源相互共享。有關(guān)這方面內(nèi)容介紹的文章已有不少,在此筆者不再贅述。要實現(xiàn)Windows Sockets應(yīng)用程序在網(wǎng)上的數(shù)據(jù)通信,僅僅達到文件資源相互共享還不夠,還必須在Windows 95控制面板中的網(wǎng)絡(luò)配置項添加上TCP / IP協(xié)議,同時給定相應(yīng)的IP地址,這些IP地址在所建的局域網(wǎng)中,不能有重復(fù)。象圖2中的網(wǎng)絡(luò),一般要采用C類地
9、址。以圖2網(wǎng)絡(luò)為例,在對TCP / IP的屬性進行設(shè)置的對話框中,在“IP地址”一項可選“指定IP地址” ,在將“子網(wǎng)屏蔽”都設(shè)置為的情況下,PC機0、PC機1、PC 機2、PC機3各計算機的IP地址可依此設(shè)置為01, 02,03,04。三、進行Windows Sockets通信程序開發(fā)的基本步驟Windows Sockets支持兩種類型的套接字,即流式套接字(SOCK_STREAM、和數(shù)據(jù)報套接字(SOCK_DGRAM。對于要求精確傳輸數(shù)據(jù)的Windows Socke
10、ts通信程序,一般采用流式套接字。流式套接字提供了一個面向連接的、可靠的、數(shù)據(jù)無錯的、無重復(fù)發(fā)送的及按發(fā)送順序接收數(shù)據(jù)的服務(wù)。其內(nèi)設(shè)流量控制,避免數(shù)據(jù)流超限,同時,數(shù)據(jù)被看作是字節(jié)流,無長度限制。采用流式套接字的應(yīng)用程序的開發(fā)都有其基本步驟,圖3是服務(wù)器方及客戶方通信程序的基本流程及作用關(guān)系。服務(wù)器方客戶機方創(chuàng)建流式套接字s1=socket(.將本地地址與s1相連bind(s1, . 監(jiān)聽來自客戶方的連接listen(s1, .建立流式套接字s=socket(.接收連接,并得到新的套接字s2s2=accept(s1, .將套接字s與服務(wù)器建立連接方主機連接connect(s, .在套接字s2上
11、,讀/ 寫數(shù)據(jù),直至在套接字s上寫/讀數(shù)據(jù),數(shù)據(jù)交換完直到數(shù)據(jù)交換完recv(s2, . 數(shù)據(jù)傳輸 send(s, .send(s2, . recv(s, .關(guān)閉套接字s2 關(guān)閉套接字sclosesocket ( s2 closesocket( s 關(guān)閉套接字s1closesocket(s1圖3 服務(wù)器及客戶機方通信程序基本流程及作用關(guān)系盡管Visual C+ 4.0對原來的Windows Sockets庫函數(shù)進行了一系列封裝,但利用Visual C+ 4.0進行Windows Sockets應(yīng)用程序開發(fā),其基本流程及作用關(guān)系仍然同圖3類似。以在Visual C+ 4.0中,經(jīng)常結(jié)合使用CSo
12、cket、CSocketFile、CArchive等類開發(fā)通信程序的方法為例,闡述其基本步驟,如圖4所示。服務(wù)器方(SERVER客戶方(CLIENT1、構(gòu)造一個套接字 1、構(gòu)造一個套接字CSocket ser_s1; CSocketcli_s;2、創(chuàng)建該套接字 2、創(chuàng)建該套接字ser_s1.Create (port ; cli_s.Create ( ;其中,port為服務(wù)器方打開的通信通道號3、開始監(jiān)聽來自客戶機的連接ser_s1.Listen( ;3、客戶機方套接字cli_s向服務(wù)器方套接字ser_s1發(fā)出連接請求cli_s .Connect (Addr,port;(其中,Addr是欲連接服
13、務(wù)器方套接字地址結(jié)構(gòu)指針,可采用IP地址或機器名。port即打開的通道號,其值與服務(wù)器方的一致。4、構(gòu)造一個新的套接字Csocket ser_s2 ; 5、服務(wù)器等待從 ser_s2 上 接受客戶連接請求 ser_s1.Accept (ser_s2 ; 6、構(gòu)造一個類 CSocketFile 的對象 4、構(gòu)造一個類 CSocketFile 的對象 CSocketFile file(&ser_s2 ; CSocketFile file(&cli_s ; 7、 構(gòu)造類 CArchive 的對象 arIn、 arOut 5、 構(gòu)造類 CArchive 的對象 arIn、 arOut
14、,以用于數(shù)據(jù)的收和發(fā)。 ,以用于數(shù)據(jù)的收和發(fā)。 CArchivearIn(&file , CArchive :load ; CArchivearIn(&file , CArchive :load ; CArchivearOut(&file , CArchive :store ;CArchivearOut(&file , CArchive :store ; 8、使用 arIn 和 arOut 進行收或發(fā)數(shù)據(jù) 6、使用 arIn 和 arOut 進行發(fā)或收數(shù) 據(jù) arIn>> value ; arOut<< value ; arOut<
15、< value ; arIn>> value ; 其中,value 是所傳輸?shù)臄?shù)據(jù) 9、摧毀所創(chuàng)建的 CSocket、 7、摧毀所創(chuàng)建的 CSocket、 CSocketFile 、CArchive 等類的對象 CSocketFile 、CArchive 等類的對象 圖 4 使用 Visual C+ 4.0 進行 Windows Sockets 應(yīng)用程序開發(fā)的基本步驟 四、使用 Visual C+ 4.0 進行 Windows Sockets 程序開發(fā)的其 它技術(shù)要點 針對使用 Visual C+ 4.0 進行 Windows Sockets 應(yīng)用程序開發(fā),需要注意以下 幾點
16、: 1、 同常規(guī)編程一樣,無論服務(wù)器方還是客戶方應(yīng)用程序都要進行所謂的初始化 處理,如圖 4 中 Addr、port 缺省值的設(shè)定等,這部分工作仍可采用消息驅(qū)動機 制來先期完成。 2、一般情況下,網(wǎng)絡(luò)通信程序是某應(yīng)用程序中的一模塊。在單獨調(diào)試網(wǎng)絡(luò)通信 程序 時,要盡量與采用該通信模塊的其它應(yīng)用程序開發(fā)者約定好,統(tǒng)一采用一種界面 形式, 即單文檔界面 SDI、多文檔界面 MDI 和基于對話框界面中的一種(這在使用 AppWizard 形 成項目Project文件時有提示),盡管這并非必須,但可使通信模塊在移植到 所需 的應(yīng)用程序時省時省力,因為 Visual C+ 4.0 這種可視化語言在給我們
17、提供方 便的同時 ,也給我們帶來某些不便,譬如所形成的項目文件中的許多相關(guān)文件與所采用的 界面形 式密切聯(lián)系,許多消息驅(qū)動功能,隨所采用的界面形式不同而各異。 當然,也可將通信模塊函數(shù)化,并形成一個動態(tài)連接庫文件(DLL 文件),供主 程序調(diào)用。 3、以通信程序作為其中一個模塊的應(yīng)用程序往往不是在等待數(shù)據(jù)發(fā)送或接收完 之后再 做其它工作,因而在主程序中要采用多線程(Multithreaded)技術(shù)。即將數(shù)據(jù) 的發(fā)或 收,放在一個具有一定優(yōu)先級(一般宜取較高優(yōu)先級)的輔助線程中,在數(shù)據(jù)發(fā) 或收期 間,主程序仍可進行其它工作,譬如利用上一個周期收到的數(shù)據(jù)繪制曲線 。 Visual C+ 4.0 中的 MFC 提供了許多有關(guān)啟動線程、管理線程、同步化線程、終止線程等功能函 數(shù)。 4、在許多情況下,要求通信模塊應(yīng)實時地收、發(fā)數(shù)據(jù)。譬如調(diào)用之的主程序以 0.5 秒為一周期,在這段時間內(nèi) ,要進行如下工作:接收數(shù)據(jù),利用收到的數(shù)據(jù)進 行運 算,將運算結(jié)果發(fā)送到其它計算機節(jié)點,周而復(fù)始。我們在充分利用 Windows Sockets 的 基于消息的網(wǎng)絡(luò)事件異步選擇機制,用消息來驅(qū)動數(shù)據(jù)的發(fā)送和接收的基礎(chǔ)上, 結(jié)合使 用其他措施, 如將數(shù)據(jù)的收和發(fā)放在高優(yōu)先級線程, 在軟件設(shè)計上, 安排好時序, 盡量 避免在同一時間內(nèi),雙方都在向?qū)Ψ桨l(fā)送大量數(shù)據(jù)的情況發(fā)生,保證網(wǎng)絡(luò)要有足 夠的 帶寬等,成功地
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年拉薩道路運輸從業(yè)資格證考試內(nèi)容是什么
- 中小學(xué)老師聘用合同
- 安裝工程分包合同范本與安裝工程合作合同6篇
- 2025年雙鴨山貨運從業(yè)資格證考試模擬考試題庫
- PVA膜產(chǎn)業(yè)分析報告
- 養(yǎng)殖用地變更合同范本
- 北碚區(qū)冷藏配送合同范本
- 中標居間協(xié)議合同范本
- 個人簡歷自薦信
- 個人第一季度工作計劃
- 學(xué)校教職工代表大會全套會議會務(wù)資料匯編
- 中華人民共和國監(jiān)察法宣貫培訓(xùn)
- 2025年山東傳媒職業(yè)學(xué)院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年春新教科版物理八年級下冊課件 第10章 流體的力現(xiàn)象 1 在流體中運動
- 《愛耳日課件》課件
- 《中醫(yī)基礎(chǔ)理論》課件-中醫(yī)學(xué)理論體系的基本特點-整體觀念
- 全國職業(yè)院校技能大賽高職組(商務(wù)數(shù)據(jù)分析賽項)備賽試題及答案
- 課題申報書:“四新”視域下地方高校學(xué)科建設(shè)與人才培養(yǎng)研究
- 施工爆破作業(yè)審批制度范文(2篇)
- 中國干眼臨床診療專家共識(2024年)解讀
- 建筑行業(yè)材料供應(yīng)應(yīng)急預(yù)案
評論
0/150
提交評論