天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

基于對(duì)等模式的Socket網(wǎng)絡(luò)通信

發(fā)布時(shí)間:2016-09-26 16:26

  本文關(guān)鍵詞:基于對(duì)等模式的Socket網(wǎng)絡(luò)通信,由筆耕文化傳播整理發(fā)布。


基于對(duì)等模式的Socket網(wǎng)絡(luò)通信


 

No. 5 Oct , 2008 .

微      處 理 機(jī)
M ICROPROCESSORS

第 5期   2008 年 10 月

基于對(duì)等模式的 Socket網(wǎng)絡(luò)通信
劉   ,鐘子發(fā) 松
(解放軍電子工程學(xué)院 ,合肥 230037 )
     : 傳統(tǒng)的 C lient - Server模式中 Socket網(wǎng)絡(luò)通信的客戶端之間不能直接通信 , 不適應(yīng)各 摘 要 主機(jī)需要直接通信的應(yīng)用 。改進(jìn)后的 C lient - Server模式 ,實(shí)現(xiàn)了各主機(jī)直接的對(duì)等模式 Socket網(wǎng) 絡(luò)通信 ,并采用先檢測(cè)后連接的方式 ,解決了通信對(duì)方未開機(jī)時(shí)連接時(shí)間較長(zhǎng)的問題 。 關(guān)鍵詞 : 套接字 ; 對(duì)等模式 ; 網(wǎng)絡(luò)通信 ; 微軟 VC ++ 6. 0 中圖分類號(hào) : TP331     文獻(xiàn)標(biāo)識(shí)碼 : B     文章編號(hào) : 1002 - 2279 ( 2008 ) 05 - 0046 - 02

The Net work Comm un ica tion of Socket Ba sed on Peer - to - Peer M odel
L I Song, ZHONG Zi - fa U
( E lectron ic Eng ineering Institu te of PLA, Hefei 230037, Ch ina )

  Abstract: In the conventional Net communication of Socket w ith Client - Server model, a C lient is inadap table to directly communicate w ith others, this paper p roposed a method to im p rove the C lient Server model and realize the Peer - to - Peer model of Socket Communication. B y the mean that detect before link, the p roblem which a host computer takes a long tim e to link the closed computer is solved. Key words: Socket; Peer - to - Peer model; Net communication; M icrosoft VC ++ 6. 0

1    概 述
Socket (套接字 ) 是建立在傳輸層協(xié)議 (主要是 TCP和 UDP )上的一種套接字規(guī)范 。套接字屏蔽了

信相對(duì)于 Client - Server模式的 Socket網(wǎng)絡(luò)通信不 需要一臺(tái) Server來轉(zhuǎn)發(fā)各 Client之間的通信信息 。 因此 ,常用的基于 Client - Server模式的 Socket網(wǎng)絡(luò) 通信不適合這種應(yīng)用 , 需要改造為基于對(duì)等模式的 Socket網(wǎng)絡(luò)通信 。

底層通信軟件和具體操作系統(tǒng)的差異 , 使得任何兩 臺(tái)安裝了 TCP (傳輸控制 ) 協(xié)議或 UDP (用戶數(shù)據(jù) 報(bào) )協(xié)議軟件并實(shí)現(xiàn)了套接字規(guī)范的計(jì)算機(jī)之間的 通信成為可能 。 Socket具有信息收發(fā)速度快 、 保密 性好 、 占用服務(wù)器吞吐能力少 、 易于編程實(shí)現(xiàn)等優(yōu) 點(diǎn) 。 Socket接 口包 含 Server Socket (服 務(wù) 器 端 ) 和 C lient Socket (客戶端 )兩個(gè)組件 。 C lient Socket組件 為客戶端組件 ,它是通信的請(qǐng)求方 ,它主動(dòng)與服務(wù)器 端建立連接 。 Server Socket 組件為服務(wù)器端組件 , 它是通信的響應(yīng)方 , 它監(jiān)聽以及被動(dòng)接受客戶端的 連接請(qǐng)求 ,并對(duì)請(qǐng)求進(jìn)行回復(fù) 。常用的 Socket網(wǎng)絡(luò) 通信一般采用 C lient - Server模式 ,各客戶端都和服 務(wù)器端連接 。此通信模式結(jié)構(gòu)簡(jiǎn)單 、 編程易實(shí)現(xiàn) ,但 各客戶端之間不能直接通信 ,需通過服務(wù)器端轉(zhuǎn)發(fā) 。 在電磁信號(hào)偵察系統(tǒng)中常有多個(gè)嵌入式系統(tǒng)主 機(jī) ,且各主機(jī)之間不存在 C lient - Server關(guān)系 , 各自 獨(dú)立工作 ,各主機(jī)之間都可直接進(jìn)行通信 。因此 ,產(chǎn) 生了對(duì)等模式的網(wǎng)絡(luò)通信需求 。對(duì)等模式的網(wǎng)絡(luò)通

2  對(duì)等模式設(shè)計(jì)
對(duì)等結(jié)構(gòu)的設(shè)計(jì)是基于對(duì) Client - Server模式 的改進(jìn) 。改進(jìn)方式是將所有主機(jī)都設(shè)計(jì)成客戶端和 服務(wù)器端 ,即各主機(jī)既設(shè)計(jì)服務(wù)器端程序 ,也設(shè)計(jì)客 戶端程序 。本機(jī)不論以服務(wù)器端或客戶端和其它主 機(jī)連接成功后都產(chǎn)生一個(gè) CSocket類指針 , 利用該 指針即可和對(duì)方主機(jī)通信 。原理如圖 1 所示 。

圖 1  對(duì)等模式原理圖

以一四主機(jī)系統(tǒng)為例 : 各主機(jī)的通信程序定義 三 個(gè) CSocket類 指針分別對(duì)應(yīng)于其它三臺(tái)主 機(jī)的

作者簡(jiǎn)介 : 劉松 ( 1973 - ) ,男 ,江西人 ,碩士研究生 ,工程師 ,主研方向 : 通信對(duì)抗技術(shù) 。 收稿日期 : 2007 - 01 - 19

 5 期

劉  松等 : 基于對(duì)等模式的 Socket網(wǎng)絡(luò)通信

?47?

Socket連接 。一臺(tái)主機(jī)既有服務(wù)器端程序又有客戶

端程序則會(huì)有兩種情況出現(xiàn) : 1 )如本機(jī)作為服務(wù)器端被其它主機(jī)連接 , 則通 過 Accep t函數(shù)對(duì) CSocket類指針賦值 , 同時(shí)可獲得 對(duì)方的 IP (網(wǎng)際協(xié)議 ) 地址并標(biāo)識(shí)該指針 。要給對(duì) 方發(fā)送數(shù)據(jù)則用相應(yīng)指針調(diào)用 Send 函數(shù)即可 。接 收到其它主機(jī)的數(shù)據(jù)時(shí)可通過調(diào)用 : GetPeerName ( SocketA ddress, SocketPort) [ 3 ] 函數(shù)來獲取發(fā)送方的 IP地址 ,根據(jù) IP 來區(qū)分發(fā)送數(shù)據(jù)的主機(jī) 。 2 )如本機(jī)需要發(fā)送數(shù)據(jù)給其它主機(jī)但尚未建 立連接 ,則調(diào)用客戶端程序 。通過使用 CSocket 類 [3] 指針調(diào)用 Connect ( IPAddress, SocketPort) 函數(shù)來 連接對(duì)方主機(jī) 。連接成功后標(biāo)識(shí)該指針 , 凡是給指 定的主 機(jī) 發(fā) 送 數(shù) 據(jù) 則 使 用 相 應(yīng) 標(biāo) 識(shí) 的 指 針 調(diào) 用 Send ( ) 函數(shù)發(fā)送數(shù)據(jù) 。接收數(shù)據(jù)方式同服務(wù)器端 相同 。

較小的固定長(zhǎng)度緩沖區(qū)的數(shù)據(jù)傳輸 , 而且不能使用 [3] CA rchive 類對(duì)象來存儲(chǔ)接收 、 發(fā)送的數(shù)據(jù) 。因此 , 使用流式套接字來實(shí)現(xiàn)數(shù)據(jù)傳輸 。 服務(wù)器通信程序的開發(fā)過程如下 : ① 創(chuàng)建套接 字 ,調(diào)用 Create ( )函數(shù) ; ② 監(jiān)聽創(chuàng)建的套接字端口并 準(zhǔn)備接受連接請(qǐng)求 ,調(diào)用 L isten ( ) 函數(shù) ; ③ 接受連接 請(qǐng)求 ,調(diào)用 Accep t ( )函數(shù)建立連接 ; ④ 發(fā)送數(shù)據(jù) , 調(diào) 用 Send ( )函數(shù)實(shí)現(xiàn) ; ⑤ 接收數(shù)據(jù) ,調(diào)用 Receive ( ) 函 數(shù)實(shí)現(xiàn) ; ⑥ 關(guān)閉套接字 , 調(diào)用 Close ( ) 函數(shù)實(shí)現(xiàn) 。詳 [2 - 3] 見參考文獻(xiàn) 。 客戶端通信程序開發(fā)過程如下 : ① 創(chuàng)建套接字 , ( ) 函數(shù) ; ② 調(diào)用 C reate 連接服務(wù)器端 , 調(diào)用 Connect ( )函數(shù)實(shí)現(xiàn) ; ③發(fā)送數(shù)據(jù) , 調(diào)用 Send ( ) 函數(shù)實(shí)現(xiàn) ; ④ 接收數(shù)據(jù) ,調(diào)用 Receive ( ) 函數(shù)實(shí)現(xiàn) ; ⑤ 關(guān)閉套接 [2 - 3] 字 ,調(diào)用 Close ( )函數(shù)實(shí)現(xiàn) 。詳見參考文獻(xiàn) 。
3. 1. 3   數(shù)據(jù)接收處理

3  程序設(shè)計(jì)
3. 1  Socket通信程序開發(fā) VC ++ 6. 0 的 M FC (微 軟 基 礎(chǔ) 類 ) 封 裝 了 的 CSocket類提供了高級(jí)的 Socket支持 ,為編寫網(wǎng)絡(luò)環(huán)

數(shù)據(jù)接收函數(shù)將接收到的數(shù)據(jù)保存在函數(shù)指定 的緩沖區(qū)中 , 程序可直接從緩沖區(qū)中讀取 。另外 , [3] M FC 提供了 CSocketFile 類 專用于保存 Socket接 收到的數(shù)據(jù) 。以下分別介紹這兩種接收方式 : ( 1 )采用 CSocketFile 類接收 , 采用這種方式需 定義一 CSocketFile 類對(duì)象和兩個(gè) CA rchive 類對(duì) 象 ,一個(gè)用于接收 、 另一個(gè)用于發(fā)送 。代碼如下 : m _pFile = new CSocketFile ( this) ; m _pA rchive In = CA rchive ( m _pFile, CA rchive: : ); load m _pA rchiveOut = CA rchive ( m _pFile, CA rchive: : store ) ; 接收數(shù)據(jù)時(shí)采用 Serialize ( 3 m _pA rchive In ) ; 函 數(shù)接收數(shù)據(jù) ,詳見參考文獻(xiàn) 4。 ( 2 )直接從接收緩沖區(qū)中讀取 , 采用這種方式
3. 2   檢測(cè)程序設(shè)計(jì)
[3]

境下基于 W indow s平臺(tái)的 C lient - Server結(jié)構(gòu)的網(wǎng) 絡(luò) 通 信 程 序 提 供 了 極 大 方 便 。只 要 利 用 好 [3] VC ++ 6. 0中的 CSocket 類 , 就能很方便快速地寫 出高質(zhì)量的網(wǎng)絡(luò)通信軟件 。
3. 1. 1  CSocket初始化 VC ++ 6. 0 的應(yīng)用程序生成向?qū)е?: 在對(duì)話框程 序向?qū)?的 第 二 步 或 文 檔 類 程 序 向 導(dǎo) 的 第 四 步 的 W indow s Socket選項(xiàng)選中即可自動(dòng)加載 Socket初始 化代碼 。如已生成應(yīng)用程序框架可以手動(dòng)加入 , 分

為兩 步 : ①在 stdafx h 文 件 中 加 入 : # include . < afxsock. h > ; ② 在應(yīng)用類初始化函數(shù)中加入 : if ( ! AfxSocketInit ( ) { Afx essageBox ( I P _ M D
SOCKETS_ I IT _ FA I ED ) ; return FALSE; }即可 對(duì) N L Socket進(jìn)行初始化 。 3. 1. 2  CSocket編程 CSocket編程均采用 Client - Server模式 , C lient - Server模式在操作過程中采取的是主動(dòng)請(qǐng)求方

接收數(shù)據(jù)必須注意 : 對(duì)方發(fā)送的一幀數(shù)據(jù)可能被打 斷分為兩幀或多幀傳送 。因此 , 接收到對(duì)方的數(shù)據(jù) 時(shí) ,應(yīng)建立一大于數(shù)據(jù)幀長(zhǎng)的 F IFO (先進(jìn)現(xiàn)出 )緩沖 區(qū) ,確保接收到完整數(shù)據(jù)幀再進(jìn)行處理 。 在實(shí)際應(yīng)用中發(fā)現(xiàn)該通信程序在連接未開機(jī)的 對(duì)方主機(jī)時(shí)耗時(shí)較長(zhǎng) , 影響了系統(tǒng)進(jìn)程 。耗時(shí)較長(zhǎng) 的原因是 TCP協(xié)議特性所致 , 無法通過程序改進(jìn)只 能避免連接未開機(jī)主機(jī) 。因此 , 有必要檢測(cè)需連接 的對(duì)方主機(jī)是否開機(jī) ,如對(duì)方已開機(jī)則連接 ,否則不 連接 。鑒于 W indow s自帶的 Ping. exe 程序執(zhí)行時(shí) , 對(duì)方如果已開機(jī)則能快速的收到回送數(shù)據(jù) , 未開機(jī) 也能在較短時(shí)間內(nèi)回送無應(yīng)答消息 。 (下轉(zhuǎn)第 50 頁 )

式 。首先服務(wù)器方要啟動(dòng) , 并根據(jù)請(qǐng)求提供相應(yīng)服 務(wù) ; 客戶端主動(dòng)請(qǐng)求連接到服務(wù)器端的相應(yīng)端口 。 詳見參 考 文 獻(xiàn) 。套 接 字 創(chuàng) 建 時(shí) 可 選 擇 SOCK _ STREAM (流式套接字 )或 SOCK_DGRAM (報(bào)文式套 接字 ) ,流式套接字使用 TCP 協(xié)議需建立連接 ,它提 供順序的 、 可靠的 、 全雙工的數(shù)據(jù)傳輸 。報(bào)文式套接 字使用 UDP協(xié)議無需建立連接 , 它提供不可靠的 、
[1]

?50?  

微      處 理 機(jī)

2008 年  

利用無線傳感器網(wǎng)絡(luò)的關(guān)鍵 。一個(gè)良好的算法應(yīng)該 滿足節(jié)省能量消耗 ,延長(zhǎng)整個(gè)網(wǎng)絡(luò)的生存時(shí)間 ; 減少 節(jié)點(diǎn)間的通信干擾 ,提高網(wǎng)絡(luò)的通信效率 ; 彌補(bǔ)節(jié)點(diǎn) 失效的影響等各方面要求 。 對(duì)于軟件算法的研究 ,目前主要集中于路由 、 定 位和覆蓋 三個(gè)方面 。路由協(xié)議負(fù)責(zé)將數(shù)據(jù)分組 從源節(jié)點(diǎn)通過網(wǎng)絡(luò)轉(zhuǎn)發(fā)到目的節(jié)點(diǎn) , 它主要包括兩 個(gè)方面的功能 : 尋找源節(jié)點(diǎn)和目的節(jié)點(diǎn)間的優(yōu)化路 徑 ,將數(shù)據(jù)分組沿著優(yōu)化路徑正確轉(zhuǎn)發(fā) 。與傳統(tǒng)網(wǎng) 絡(luò)的路由協(xié)議相比 , 無線傳感器網(wǎng)絡(luò)的路由協(xié)議具 有以下特點(diǎn) : 能量?jī)?yōu)先 、 基于局部拓?fù)湫畔?、 以數(shù)據(jù) 為中心 、 應(yīng)用相關(guān) 。針對(duì)傳感器網(wǎng)絡(luò)路由機(jī)制的上 述特點(diǎn) ,在根據(jù)具體應(yīng)用設(shè)計(jì)路由機(jī)制時(shí) ,要使傳感 器網(wǎng)絡(luò)路由協(xié)議滿足能量高效 、 可以擴(kuò)展 、 魯棒性能 好和可以快速收斂的特點(diǎn) 。 傳感器節(jié)點(diǎn)自身定位就是根據(jù)少數(shù)已知位置的 節(jié)點(diǎn) ,按照某種定位機(jī)制確定自身的位置 。 [6] 無線傳感器網(wǎng)絡(luò)的覆蓋 問題 , 可以看作是在 傳感器網(wǎng)絡(luò)節(jié)點(diǎn)能量 、 無線網(wǎng)絡(luò)通信帶寬 、 網(wǎng)絡(luò)計(jì)算 能力等資源普遍受限的情況下 , 通過網(wǎng)絡(luò)傳感器節(jié) 點(diǎn)放置以及路由選擇等手段 , 最終使無線傳感器網(wǎng) 絡(luò)的各種資源得到優(yōu)化分配 , 進(jìn)而使得感知 、 監(jiān)視 、 傳感 、 通信等各種服務(wù)質(zhì)量得到改善 。
(上接第 47 頁 )
[5]

5  束 語 結(jié)
無線傳感器網(wǎng)絡(luò)的應(yīng)用前景十分誘人 。傳統(tǒng)應(yīng) 用有軍事 、 監(jiān)控 、 應(yīng)急 、 環(huán)境 、 防空等領(lǐng)域 , 新興應(yīng)用 將涉及家用 、 企業(yè)管理 、 保健 、 交通等領(lǐng)域 ?梢灶A(yù) 計(jì) ,將來無線傳感器網(wǎng)絡(luò)將無處不在 。W SN 的終端 要達(dá)到希望的要求還會(huì)有很長(zhǎng)一段發(fā)展歷程 , 可以 由易到難 , 利 用 現(xiàn) 有 通 信 技 術(shù) 和 系 統(tǒng) (如 無 線 市 話 ) ,逐步演進(jìn)升級(jí) 。無線傳感器網(wǎng)絡(luò)的業(yè)務(wù)和應(yīng) 用也需要不斷開發(fā) ,形成新興的應(yīng)用領(lǐng)域 。
參考文獻(xiàn) : [1]  任豐原 , 黃海寧 , 林闖 . 無線傳感器網(wǎng)絡(luò) [ J ]. 軟件學(xué) 報(bào) , 2003, 14 ( 7 ) : 1282 - 1291. [2]  李建中 ,李金寶 ,石勝飛 . 傳感器網(wǎng)絡(luò)及其數(shù)據(jù)管理的 概念 、 題 與 進(jìn) 展 [ J ]. 軟 件 學(xué) 報(bào) , 2003, 14 ( 10 ) : 問 1717 - 1727. [3]  夏俐 ,陳曦 , 趙千川 , 等 . 無線傳感器網(wǎng)絡(luò)及應(yīng)用簡(jiǎn)介 [ J ]. 自動(dòng)化博覽 , 2004, 1 ( 1 ) : 34 - 37. [4]  黃潤(rùn)發(fā) . VB 程序設(shè)計(jì)技術(shù) [M ]. 北京 : 中國紡織大學(xué) 出版社 , 2001. [ 5 ]  X R W ang, G L Xing, Y F Zhang, et al Integrated Cover2 . age and Connectivity Configuration in W ireless Sensor Networks[ J ]. 2003; Proc. ACM SenSys: 28 - 39. [ 6 ]  H Zhang, J C Hou. M aintaining Sensing Coverage and Connectivity in Large Sensor Networks [ J ]. Technical report, 2003; U I CDCS - R: 23 - 51. U

因此 ,我們?cè)O(shè)計(jì)一個(gè)類似 Ping exe 的程序用于檢測(cè) . 對(duì)方是否開機(jī) 。根據(jù) UDP, 給其它主機(jī)發(fā)送特定內(nèi) 容的 UDP報(bào)文 ,對(duì)方在開機(jī)狀態(tài)則可迅速回送相應(yīng) 報(bào)文 ,如在規(guī)定時(shí)間內(nèi)沒有收到回送報(bào)文則產(chǎn)生無 應(yīng)答消息 ,程序根據(jù)收到回送或無應(yīng)答判斷對(duì)方主 機(jī)是否已開機(jī) 。 M SDN (微軟開發(fā)商網(wǎng)絡(luò) ) L ibrary提供了一個(gè) C 語言編寫的例程 p ing
[3]

4  束 語 結(jié)

鑒于傳統(tǒng)的 C lient - Server模式的 Socket網(wǎng)絡(luò)

通信不適用于系統(tǒng)內(nèi)各主機(jī)需直接通信的應(yīng)用場(chǎng) 合 ,在傳統(tǒng)的 C lient - Server模式基礎(chǔ)上加以改進(jìn) , 實(shí)現(xiàn)了對(duì)等模式的 Socket 網(wǎng)絡(luò)通信 。并利用 UDP 協(xié)議的特點(diǎn)實(shí)現(xiàn)了對(duì)對(duì)方是否開機(jī)的快速檢測(cè) , 避 免了在通信對(duì)方未開機(jī)時(shí)連接時(shí)間較長(zhǎng)的問題 。該 通信程序已經(jīng)應(yīng)用于某項(xiàng)目 , 實(shí)際應(yīng)用表明該程序 通信穩(wěn)定可靠 ,特別適合于系統(tǒng)內(nèi)部對(duì)等主機(jī)間的 高速數(shù)據(jù)通信 。

, 將其改造為 VC ++程序 。

該程序主要有三部分 : ①產(chǎn)生報(bào)文 ; ②發(fā)送報(bào)文 ; ③ 接收回送報(bào)文 。 ①、 部分可直接使用例程中代 ② 碼,③ 部分的接收函數(shù)需改進(jìn) 。例程中的接收函數(shù) 返回 值 為
SOCKET _ ERROR 時(shí) 僅 處 理 了 W SAETI EDOUT M 事件 ,以此事件為是否開機(jī)的判據(jù)

在實(shí)際使用時(shí)發(fā)現(xiàn)判斷結(jié)果有誤 。因此增加了對(duì)
W SAECONNREFUSED、 SAENETUNREACH 事件的 W

處理 ,即僅以收到 W SAETI EDOUT 事件判斷對(duì)方 M 為“ 未開機(jī) ” 。實(shí)際使用表明經(jīng)改進(jìn)后判決結(jié)果準(zhǔn) 確無誤 。

參考文獻(xiàn) : [1]  李峰 . 利用流式 Socket編程實(shí)現(xiàn) W indow s與 L inux的 通信 [ J ]. 微計(jì)算機(jī)信息 , 2006, 22 ( 3 ) : 112 - 113. [2]  張士剛 . C ++中實(shí)現(xiàn)局域網(wǎng)的數(shù)據(jù)通信 [ J ]. 福建電 腦 , 2006 ( 6 ) : 198 - 199. [ 3 ]  M icrosoft Corp. M SDN L ibrary The October 2001 release [ CP /DK ]. USA: M SDN , 2001. [4]  王宏 ,李浩 ,鄢烈祥 . 套接字技術(shù)在遠(yuǎn)程優(yōu)化操作支持 系統(tǒng)中的應(yīng)用 [ J ]. 武漢理工大學(xué)學(xué)報(bào) , 2006, 28 ( 6) : 63 - 65. [5]  蔡君巧 ,褚亮亮 ,許建龍 . 基于異步非阻塞套接字的網(wǎng) 絡(luò)通訊 [ J ]. 現(xiàn)代電子技術(shù) , 2006 (4) : 62 - 63.


更多搜索:基于對(duì)等模式的Socket網(wǎng)絡(luò)通信


  本文關(guān)鍵詞:基于對(duì)等模式的Socket網(wǎng)絡(luò)通信,,由筆耕文化傳播整理發(fā)布。



本文編號(hào):123853

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/kejilunwen/wltx/123853.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶0eaca***提供,本站僅收錄摘要或目錄,作者需要?jiǎng)h除請(qǐng)E-mail郵箱bigeng88@qq.com