青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

?第二部分Winsock API
?
?Wi n s o c k是網(wǎng)絡編程接口,而不是協(xié)議。它從U n i x平臺的B e r k e l e y(B S D)套接字方案借鑒了許多東西,后者能訪問多種網(wǎng)絡協(xié)議。在Wi n 3 2環(huán)境中,Wi n s o c k接口最終成為一個真正的“與協(xié)議無關”接口,尤其是在Winsock 2發(fā)布之后。
本部分開始之前,我們假定大家已具備了Wi n s o c k(或B S D套接字)的基本知識,而且多少熟悉一些客戶機/服務器的Wi n s o c k基本知識。

第5章網(wǎng)絡原理和協(xié)議

建立Winsock 2規(guī)范的主要目的是提供一個與協(xié)議無關的傳送接口。

5.1 協(xié)議的特征
本章第一小節(jié)著重講解目前常用網(wǎng)絡傳送協(xié)議的一些基本特征。通過這里的學習,大家可掌握與協(xié)議行為類型有關的一些背景知識。同時,作為程序員,可大致知道特定協(xié)議在程序中的行為方式。

5.1.1 面向消息
對每個離散寫命令來說,如果傳送協(xié)議把它們(而且只有它們)當做一條獨立的消息在網(wǎng)上傳送,我們就說該協(xié)議是面向協(xié)議的。同時,還意味著接收端在接收數(shù)據(jù)時,返回的數(shù)據(jù)是發(fā)送端寫入的一條離散消息。接收端不能得到更多的消息,僅此而已。比如,在圖5 - 1中,
左邊的工作站向右邊的工作站提交了三條分別是1 2 8、6 4和3 2字節(jié)的消息。作為接收端的工作站發(fā)出三條讀取命令,緩沖區(qū)是2 5 6個字節(jié)。后來的各次調用返回的分別是1 2 8、 6 4 和3 2個字節(jié)。第一次讀取調用不會將這所有的三個數(shù)據(jù)包都返回,即使這些數(shù)據(jù)包已經(jīng)收到也如此。這稱為“保護消息邊界”(preserving message boundaries),,一般出現(xiàn)在交換結構化數(shù)據(jù)時。
網(wǎng)絡游戲是“保護消息邊界”的較好范例。每個玩家均向別的玩家發(fā)出一個帶有地圖信息的數(shù)據(jù)包。這種通信后面的代碼很簡單:一個玩家請求一個數(shù)據(jù)包,另一個玩家又準確地從別的玩家處獲得一個地圖信息數(shù)據(jù)包。

無保護消息邊界的協(xié)議通常稱作“基于流的協(xié)議”。大家要知道“基于流的協(xié)議”這一術語常用來指代附加特性。流服務的定義是連續(xù)的數(shù)據(jù)傳輸;不管消息邊界是否存在,接收端都會盡量地讀取有效數(shù)據(jù)。對發(fā)送端來說,意味著允許系統(tǒng)將原始消息分解成小消息或把幾條消息積累在一起,形成一個較大的數(shù)據(jù)包。對接收端來說,則是數(shù)據(jù)一到達網(wǎng)絡堆棧,
網(wǎng)絡堆棧就開始讀取它,并將它緩存下來等候進程處理。在進程請求處理大量數(shù)據(jù)時,系統(tǒng)會在不溢出為客戶請求提供的緩沖區(qū)這一前提下,盡量返回更多的數(shù)據(jù)。在圖5 - 2中,發(fā)送端提交了三個數(shù)據(jù)包:分別是1 2 8、6 4和3 2個字節(jié);但是,本地系統(tǒng)堆棧自由地把這些數(shù)據(jù)聚合在一起,形成一個大的數(shù)據(jù)包。這種情況下,重組后的2個數(shù)據(jù)包就會一起傳輸。是否將各個獨立的數(shù)據(jù)包累積在一起受許多因素的影響,比如最大傳輸單元或N a g l e算法。在T C P / I P中,在將積累起來的數(shù)據(jù)發(fā)到線上之前, N a g l e算法在等候數(shù)據(jù)積累的主機中進行。
在需要發(fā)送的數(shù)據(jù)積累到一定數(shù)量或預定時間已超過之前,這個主機會一直等下去。實施N a g l e算法時,主機的通信方在發(fā)送主機確認之前,會等一等外出數(shù)據(jù),主機的通信方就不必發(fā)送一個只有確認的數(shù)據(jù)包。發(fā)送小數(shù)據(jù)包不僅沒有多少意義,而且還會徒增錯誤檢查和確認,相當煩人。
在接收端,網(wǎng)絡堆棧把所有進來的數(shù)據(jù)包聚集在一起,歸入既定進程。我們來看看圖5 - 2。
如果接收端執(zhí)行一次2 5 6字節(jié)緩沖區(qū)的讀取,系統(tǒng)馬上就會返回2 2 4個字節(jié)。如果接收端只要求讀取2 0個字節(jié),系統(tǒng)就會只返回2 0個字節(jié)。

偽流
偽流( p s e u d o - s t r e a m)這個術語常用于某種系統(tǒng)中,該系統(tǒng)使用的協(xié)議是基于消息的,
發(fā)送的數(shù)據(jù)分別在各自獨立的數(shù)據(jù)包內,接收端讀取并把消息緩存在一起,  這樣,接收應用
程序便可讀取任意大小的數(shù)據(jù)塊。把圖5 - 1中的發(fā)送端和圖5 - 2中的接收端結合起來,便可說明
偽流的工作原理。發(fā)送端必須分別發(fā)送各自獨立的數(shù)據(jù)包,但接收端可以對收到的數(shù)據(jù)包自
由組合。一般情況下,可把偽流視作一個普通的“面向流的協(xié)議”。


5.1.2 面向連接和無連接
通常情況下,一個協(xié)議提供面向連接的服務,或提供無連接的服務。面向連接的服務中,
進行數(shù)據(jù)交換之前,必須與通信方建立一條路徑。這樣既確定了通信方之間存在路由,又保證了通信雙方都是活動的、都可彼此響應,但其特點是在通信雙方之間建立一個通信信道需要很多開支。除此以外,大部分面向連接的協(xié)議為保證投遞無誤,可能會因為執(zhí)行額外的計算來驗證正確性,因此,進一步增加開支。而無連接協(xié)議卻不保證接收端是否正在收聽。無連接服務類似于郵政服務:發(fā)信人把信裝入郵箱即可。至于收信人是否想收到這封信或郵局是否會因為暴風雨未能按時將信件投遞到收信人處等等,發(fā)信人都不得而知。


5.1.3 可靠性和次序性
在設計用于特定協(xié)議的應用程序來說,可靠性和次序性是我們必須了解的最具決定性的特性。大多數(shù)情況下,可靠性和次序性與協(xié)議是無連接的,還是面向連接的密切相關。

5.1.4 從容關閉
從容關閉只出現(xiàn)在面向連接的協(xié)議中。在這種關閉過程中,一方開始關閉通信會話,但另一方仍然可以讀取線上或網(wǎng)絡堆棧上已掛起的數(shù)據(jù)。如果面向連接的協(xié)議不支持從容關閉,
只要其中一方關閉了通信信道,都會導致連接立即中斷,數(shù)據(jù)丟失,接收端不能讀取數(shù)據(jù)這些情況出現(xiàn)。

5.1.5 廣播數(shù)據(jù)
廣播數(shù)據(jù)即數(shù)據(jù)從一個工作站發(fā)出,局域網(wǎng)內的其他所有工作站都能收到它。這一特征
適用于無連接協(xié)議,因為L A N上的所有機器都可獲得并處理廣播消息。。一般情況下,路由器都不會傳送廣播包。 ?

5.1.6 多播數(shù)據(jù)
多播是指一個進程發(fā)送數(shù)據(jù)的能力,這些數(shù)據(jù)即將由一個或多個接收端進行接收。進程加入一個多播會話的方法和采用的基層協(xié)議有關。視頻會議應用常常使用多播。

5.1.7 服務質量
服務質量( Q o S)是應用的一種能力,用以請求針對專門用途分配特定的帶寬。

5.1.8 部分消息
部分消息只用于面向消息的協(xié)議。

5.1.9 路由選擇的考慮
一個重要考慮就是協(xié)議是否可路由。如果協(xié)議可路由,就可在兩個工作站之間建立一條成功的通信路徑(要么是面向連接的回路,要么是數(shù)據(jù)報的數(shù)據(jù)路徑),不管這兩個工作站之間存在的網(wǎng)絡硬件是什么。路由器不對發(fā)自非路由協(xié)議的數(shù)據(jù)包進行轉發(fā),即便數(shù)據(jù)包的既定目的地在其連接的子網(wǎng)上。

5.2 支持的協(xié)議
Wi n 3 2平臺提供的最有用的特征之一是能夠同步支持多種不同的網(wǎng)絡協(xié)議。
利用Wi n s o c k編程接口的好
處之一是因為它是一個與協(xié)議無關的接口。不管使用的是哪一種協(xié)議,它們的操作大多數(shù)是
相通的。

要想獲得系統(tǒng)中安裝的網(wǎng)絡協(xié)議的相關信息,調用這個函數(shù)W S A E n u m P r o t o c o l s即可,
打開Winsock在可以調用一個Wi n s o c k函數(shù)之前,必須先加載一個版本正確的Wi n s o c k庫。Wi n s o c k
啟動例程是W S A S t a r t u p,它的定義是:
int WSAStartup(WORD wVe r s i o n R e q u e s t e d , L P W S A D ATA lpWSAData)
第一個參數(shù)是準備加載的Wi n s o c k庫的版本號。就目前的Wi n 3 2平臺而言,Winsock 2
庫的最新版本是2 . 2。唯一的例外是Windows CE,它只支持Winsock 1.1版。如果需要
Winsock 2.2版,指定這個值( 0 x 0 2 0 2)或使用宏M A K E W O R D ( 2 , 2 )即可。高位字節(jié)指定
副版本,而低位字節(jié)則指定主版本。
第二個參數(shù)是W S A D ATA結構,它是調用完成之后立即返回的。W S A D ATA包含了W S A S t a r t u p加載的關于Wi n s o c k版本的信息。
大致說來,在W S A D ATA結構中,返回的唯一有用的信息是w Ve r s i o n和w H i g h Ve r s i o n。
屬于最大套接字和最大U D P長度的條目應該從自己正在使用的特定協(xié)議目錄條目中獲取。

在結束Wi n s o c k庫,而且不再需要調用任何Wi n s o c k函數(shù)時,會卸載這個庫,并釋放資源。這個函數(shù)的定義是:
int WSACleanup (void);
記住,每次調用W S A S t a r t u p,都需要調用相應的W S A C l e a n u p,因為每次啟動調用都
會增加對加載Winsock DLL的引用次數(shù),它要求調用同樣多次的W S A C l e a n u p,以此抵消
引用次數(shù)。

5.4 Windows套接字

。所謂套接字,就是一個指向傳輸提
供者的句柄。Wi n 3 2中,套接字不同于文件描述符,所以它是一個獨立的類型—S O C K E T。
套接字是由兩個函數(shù)建立的:
SOCKET WSASocket(int af,
???????? int type,
???????? int protocol,
???????? LPWSAPROTOCOL_INOF lpProtocolInfo,
???????? GROUP g,
???????? DWORD dwFlag
???????? );
SOCKET socket(int af,
???????int type,
???????int protocol
???????);
第一個參數(shù)a f,是協(xié)議的地址家族。比如,如果想建立一個U D P或T C P套接字,可用常量A F _ I N E T來指代互聯(lián)網(wǎng)協(xié)議( I P)。
第二個參數(shù)t y p e,是協(xié)議的套接字類型。套接字的類型可以是下面五個值:
?S O C K _ S T R E A M、S O C K _ D G R A M、S O C K _ S E Q PA C K E T、S O C K _ R AW和S O C K _ R D M。
第三個參數(shù)是p r o t o c o l。指定的地址家族和套接字類型有多個條目時,就可用
這個字段來限定使用特定傳輸。

最后兩個W S A S o c k e t標志很簡單。組參數(shù)始終為0,因為目前尚無可支持套接字組的
Wi n s o c k版本。要指定一個或多個下列標志,可用d w F l a g s參數(shù):
■ W S A _ F L A G _ O V E R L A P P E D
■ W S A _ F L A G _ M U LT I P O I N T _ C _ R O O T
■ W S A _ F L A G _ M U LT I P O I N T _ C _ L E A F
■ W S A _ F L A G _ M U LT I P O I N T _ D _ R O O F
■ W S A _ F L A G _ M U LT I P O I N T _ D _ L E A F
第一個標志W(wǎng) S A _ F L A G _ O V E R L A P P E D,用于指定這個套接字具備重疊I / O(是適用于
Wi n s o c k的可能實現(xiàn)的通信模式之一)。這個主題將在第8章詳細討論。調用s o c k e t建立一個套
接字時, W S A _ F L A G _ O V E R L A P P E D便是默認設置。一般說來,在使用W S A S o c k e t時,最好
始終保持設定該標志。后面四個標志用于處理多播套接字。


原始套接字
利用W S A S o c k e t建立套接字時,可向函數(shù)調用傳送一個W S A P R O TO CO L _ I N F O結構,以
定義準備建立的那個套接字的類型;盡管如此,還是可建立一些套接字類型(在傳輸提供者
目錄中,它們沒有相應的條目)。最佳示例是I P協(xié)議下的原始套接字。原始套接字一種通信,
允許你把其他協(xié)議封裝在U D P數(shù)據(jù)包中,比如說“互聯(lián)網(wǎng)控制消息協(xié)議”(I C M P)。I C M P的
目的是投遞互聯(lián)網(wǎng)主機間的控制、錯誤和信息型消息。由于I C M P不提供任何數(shù)據(jù)傳輸功能,
因此不能把它與U D P或T C P同等看待,但它和I P本身屬于同一個級別。

Winsock API安裝在“會話層”和“傳送層”之間。

5.6 選擇適當?shù)膮f(xié)議
T C P / I P就是首選協(xié)議之一,至少從支持能力和微軟的贊助這一角度來看,是
這樣的

5.7 小結
通過本章的學習,大家已了解為應用程序選擇網(wǎng)絡傳輸時應該知道的基本特性。在為指100計計第二部分附Winsock API
下載定的協(xié)議開發(fā)成功的網(wǎng)絡應用程序時,了解這些特性是至關重要的。我們還有計劃地深入探討了如何獲得安裝在系統(tǒng)中的傳輸提供者列表和如何查詢特定屬性。最后,我們還學習了如何為指定的傳輸建立套接字,方法是為W S A S o c k e t或s o c k e t函數(shù)指定正確的參數(shù),再利用
W S A E n u m P r o t o c o l s查詢目錄條目以及通過W S A P R O TO C O L _ I N F O結構,把函數(shù)投遞到W S A S o c k e t。下一章,我們將進一步探討各主要協(xié)議的定址方法。

?

Posted on 2006-09-06 19:00 艾凡赫 閱讀(437) 評論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡編程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区三区久久精品| 久久人人爽人人| 国产午夜精品一区理论片飘花| 欧美成人免费全部| 蘑菇福利视频一区播放| 巨乳诱惑日韩免费av| 久久成人免费视频| 免费观看一区| 在线视频日韩| 久久xxxx精品视频| 欧美**人妖| 99精品国产在热久久| 亚洲欧美成人网| 久久久一区二区| 欧美日韩一区二区在线观看视频| 国产精品theporn| 韩国一区电影| 一区二区三区精品| 久久亚洲二区| 在线视频你懂得一区| 欧美在线日韩| 欧美日韩在线播放| 黄网站免费久久| 在线亚洲精品福利网址导航| 欧美在线观看视频在线| 亚洲黄色大片| 久久av在线看| 国产精品第2页| 亚洲经典一区| 久久久久久9999| 亚洲一区久久久| 欧美日韩在线综合| 日韩午夜视频在线观看| 久久精品国产96久久久香蕉| 亚洲高清色综合| 久久精品国产v日韩v亚洲| 欧美视频一区二区三区在线观看| 黄色精品一区二区| 久久精品九九| 亚洲欧美日韩精品久久亚洲区| 男同欧美伦乱| 亚洲国产毛片完整版| 久久久久久久久久看片| 亚洲视频综合在线| 欧美体内she精视频| 日韩视频一区二区| 欧美激情中文字幕在线| 久久久久久日产精品| 国产一区二区三区在线观看网站| 亚洲色无码播放| 亚洲精品社区| 欧美精品在线观看一区二区| 久久久久久久久久码影片| 欧美日韩三级| 亚洲一区二区av电影| 亚洲激情另类| 欧美日本中文| 夜夜嗨av一区二区三区网站四季av| 欧美激情一区二区久久久| 久久视频这里只有精品| 一区二区亚洲精品| 欧美福利影院| 欧美日韩国产成人在线观看| 亚洲四色影视在线观看| 在线一区二区日韩| 国产老女人精品毛片久久| 久久久精品网| 久久全球大尺度高清视频| 亚洲黄色免费电影| 日韩网站在线观看| 国产精品jvid在线观看蜜臀| 夜夜精品视频一区二区| 亚洲深夜福利网站| 国产自产精品| 欧美成人免费小视频| 欧美精品免费视频| 先锋影音国产精品| 久久久欧美一区二区| 亚洲精品日韩在线观看| 亚洲伦理自拍| 国产一区二区三区直播精品电影 | 欧美日韩亚洲91| 亚洲天堂男人| 午夜欧美不卡精品aaaaa| 在线观看日韩精品| 日韩视频免费观看| 国产日产欧产精品推荐色| 久久免费99精品久久久久久| 老色批av在线精品| 午夜一区二区三区不卡视频| 性色一区二区| 日韩网站免费观看| 欧美一级播放| 亚洲少妇在线| 免费91麻豆精品国产自产在线观看| 一区二区三区四区国产| 午夜免费在线观看精品视频| 亚洲精品久久久久久久久久久久久 | 久久精品国产在热久久| 亚洲精品在线免费观看视频| 亚洲一区二区不卡免费| 亚洲黄色成人| 亚洲欧美一级二级三级| 亚洲三级电影全部在线观看高清| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲免费小视频| 亚洲国产日韩欧美综合久久| 国产精品99久久久久久人| 亚洲欧洲一区二区三区久久| 在线观看成人小视频| 亚洲精品中文字幕在线| 在线观看一区欧美| 午夜天堂精品久久久久| 亚洲一区二区三区在线视频| 欧美aaaaaaaa牛牛影院| 久久婷婷人人澡人人喊人人爽| 欧美日韩在线免费| 亚洲国语精品自产拍在线观看| 韩国一区电影| 午夜精品视频在线观看| 欧美一二三视频| 国产精品视频免费观看www| 99pao成人国产永久免费视频| 亚洲人线精品午夜| 久久久久欧美精品| 久久久久综合| 国产曰批免费观看久久久| 亚洲欧美日韩综合国产aⅴ| 亚洲欧美日韩综合一区| 国产精品电影在线观看| 日韩一级欧洲| 在线综合亚洲| 欧美视频免费看| 一二三区精品| 亚洲欧美视频在线观看| 国产精品视频不卡| 性一交一乱一区二区洋洋av| 篠田优中文在线播放第一区| 国产精品手机视频| 欧美一区二区在线观看| 久久香蕉国产线看观看网| 黑人巨大精品欧美黑白配亚洲| 久久九九99视频| 欧美不卡视频一区发布| 亚洲欧洲精品天堂一级| 欧美福利视频网站| 亚洲美女中文字幕| 欧美一区二区三区男人的天堂| 国产日韩在线视频| 久久精品国产清高在天天线 | 一片黄亚洲嫩模| 亚洲欧美国产高清va在线播| 国产精品久久久久久久7电影| 亚洲一区在线观看免费观看电影高清| 亚洲天堂av综合网| 国产美女一区二区| 久久蜜桃资源一区二区老牛 | 亚洲日韩欧美视频| 欧美日本一区二区高清播放视频| 一区二区黄色| 久久女同互慰一区二区三区| 在线看成人片| 欧美视频成人| 久久野战av| 亚洲一级在线观看| 欧美成人在线免费视频| 亚洲欧美国产77777| 亚洲国产电影| 国产精品麻豆成人av电影艾秋| 欧美一区二区三区婷婷月色| 狠狠久久亚洲欧美| 欧美日韩精品不卡| 久久精品夜夜夜夜久久| 日韩视频在线一区二区三区| 欧美一区二区性| 最新国产成人在线观看| 国产精品永久免费观看| 欧美大秀在线观看| 欧美在线观看网站| 一本久道久久综合中文字幕| 久久综合伊人77777麻豆| 99视频精品全国免费| 国产一区二区三区四区hd| 欧美午夜激情小视频| 欧美aa在线视频| 久久精品国产91精品亚洲| 亚洲美女免费精品视频在线观看| 蜜臀久久99精品久久久画质超高清| 亚洲夜间福利| 日韩午夜一区| 亚洲国产色一区| 激情文学综合丁香| 国产伦理一区| 欧美视频二区| 欧美精品自拍偷拍动漫精品| 久久久久久免费| 欧美与黑人午夜性猛交久久久| 中文在线一区| 日韩视频在线一区| 亚洲精品视频中文字幕|