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

?7.3.2 客戶機API函數
?
?客戶機要簡單得多,建立成功連接所需的步驟也要少得多。客戶機只需三步操作:
1) 用s o c k e t或W S A S o c k e t創建一個套接字。
2) 解析服務器名(以基層協議為準)。
3) 用c o n n e c t或W S A C o n n e c t初始化一個連接。

TCP狀態
作為一名Wi n s o c k程序員,通常沒必要了解實際的T C P狀態。但了解T C P狀態,就能更好地理解Winsock API調用如何對基層協議中的改變產生影響。此外,許多程序員在關閉套接字時,會碰到一個常見問題;圍繞套接字關閉的T C P狀態是我們目前最感興趣的問題。

對每個套接字來說,它的初始狀態都是C L O S E D。若客戶機初始化了一個連接,就會向服務器發送一個S Y N包,同時將客戶機套接字狀態置為S Y N _ S E N T。服務器收到S Y N包后,會發出一個“ S Y N - A C K”包。作為客戶機,需要用一個A C K包對它做出反應。此時,客戶機的套接字會變成E S TA B L I S H E D狀態。如果服務器一直不發送“ S Y N - A C K”包,客戶機就會超時,并返回C L O S E D狀態。

若一個服務器的套接字同一個本地接口和端口綁定起來,并在它上面進行監聽,那么套接字的狀態便是L I S T E N。客戶機試圖與之連接時,服務器就會收到一個S Y N包,并用一個S Y N - A C K包做出響應。服務器套接字的狀態就變成S Y N _ R C V D。最后,客戶機發出一個A C K包,令服務器套接字的狀態變成E S TA B L I S H E D。

一旦應用處于E S TA B L I S H E D狀態,可通過兩種方法來關閉它。如果由應用程序來關閉,便叫作“主動套接字關閉”;否則,套接字的關閉便是被動的。圖7 - 2對兩種關閉方法進行了解釋。如主動關閉,應用程序便會發出一個F I N包。應用程序調用c l o s e s o c k e t或s h u t d o w n時(把S D _ S E N D當作第二個參數),會向對方發出一個F I N包,而且套接字的狀態則變成F I N _ WA I T _ 1。正常情況下,通信對方會回應一個A C K包,我們的套接字的狀態
隨之變成F I N _ WA I T _ 2。如對方也關閉了連接,便會發出一個F I N包,我們的機器則會響應一個A C K包,并將己方套接字的狀態置為T I M E _ WA I T。

T I M E _ WA I T狀態也叫作2 M S L等待狀態。其中, M S L代表“分段最長生存時間”(Maximum Segment Lifetime),表示一個數據包在丟棄之前,可在網絡上存在多長時間。
每個I P包都含有一個“生存時間”(T T L)字段,若它遞減為0,包便會被丟棄。一個包經過網絡上的每個路由器時, T T L 值都會減1 ,然后繼續傳遞。一旦應用程序進入T I M E _ WA I T狀態,那么就會一直持續M S L時間的兩倍之久。這樣一來, T C P就可以在最后一個A C K丟失的前提下,重新發送它,也就是說, F I N會被重新傳送出去。M S L時間兩倍之久的等待狀態結束之后,套接字便進入C L O S E D狀態。
圖7-2 TCP套接字的關閉狀態

套接字主動關閉
關閉套接字
發送: FIN----->FIN_WAIT_1--接收:ACK-->FIN_WAIT_2----接收: FIN發送: ACK--->TIME_WAIT(2MSL超時)----->CLOSED


套接字主動關閉
關閉套接字
發送: FIN----->接收: FIN發送: ACK---->CLOSING--接收: ACK-->TIME_WAIT(2MSL超時)----->CLOSED


套接字主動關閉
關閉套接字
發送: FIN----->接收: FIN_ACK發送: ACK----->TIME_WAIT(2MSL超時)----->CLOSED


套接字被動關閉
接收: FIN
發送: ACK------>CLOSE_WAIT--關閉套接字發送: FIN-->LAST_ACK------->CLOSED

T I M E _ WA I T狀態也叫作2 M S L等待狀態。其中, M S L代表“分段最長生存時間”(Maximum Segment Lifetime),表示一個數據包在丟棄之前,可在網絡上存在多長時間。
每個I P包都含有一個“生存時間”(T T L)字段,若它遞減為0,包便會被丟棄。一個包經過網絡上的每個路由器時, T T L 值都會減1 ,然后繼續傳遞。一旦應用程序進入T I M E _ WA I T狀態,那么就會一直持續M S L時間的兩倍之久。這樣一來, T C P就可以在最后一個A C K丟失的前提下,重新發送它,也就是說, F I N會被重新傳送出去。M S L時間兩倍之久的等待狀態結束之后,套接字便進入C L O S E D狀態?

采取主動關閉措施時,有兩個路徑會進入T I M E _ WA I T狀態。在我們以前的討論中,
只有一方發出一個F I N,并接收一個A C K響應。然而,另一方仍然可以自由地發送數據,
直到它也被關閉為止。因此,需要兩個路徑發揮作用。在一個路徑中(即同步關閉),一臺計算機和它的通信對方會同時要求關閉;計算機向對方送出一個F I N數據包,并從它那里接收一個F I N數據包。隨后,計算機會發出一個A C K數據包,對對方的F I N包做出響應,并將自己的套接字置為C L O S I N G狀態。計算機從對方那里接收到最后一個A C K包之后,它的套接字狀態會變成T I M E _ WA I T。?

主動關閉時,另一個路徑其實就是同步關閉的變體:套接字從F I N _ WA I T _ 1狀態直接變成T I M E _ WA I T。若應用程序發出一個F I N數據包,但幾乎同時便從對方那里接收到一個F I N - A C K包,這種情況就會發生。在這種情況下,對方會確認收到應用程序的F I N包,并送出自己的F I N包。對于這個包,應用程序會用一個A C K包做出響應。
T I M E _ WA I T狀態的主要作用是在T C P連接處于2 M S L等待狀態的時候,規定用于建立那個連接的一對套接字不可被拒絕。這對套接字由本地I P端口以及遠程I P端口組成。對某些T C P實施方案來說,它們不允許拒絕處于T I M E _ WA I T狀態下的套接字對中的任何端口號。在微軟的方案中,不會存在這個問題。然而,若試圖通過一對已處于T I M E _ WA I T狀態的套接字建立連接,就會失敗,并返回W S A E A D D R I N U S E錯誤。要解決這一問題(除了等待使用那個本地端口來脫離T I M E _ WA I T狀態的套接字對),一個辦法是使用套接字選
項S O _ R E F U S E A D D R,我們將在第9章對這個選項進行詳細討論。
被動關閉情況下,應用程序會從對方那里接收一個F I N包,并用一個A C K包做出響應。此時,應用程序的套接字會變成C L O S E _ WA I T狀態。由于對方已關閉自己的套接字,所以不能再發送數據了。但應用程序卻不同,它能一直發送數據,直到對方的套接字已關閉為止。要想關閉對方的連接,應用程序需要發出自己的F I N,令應用程序的套接字狀態變成L A S T _ A C K。應用程序從對方收到一個A C K包后,它的套接字就會逆轉成C L O S E D狀態。
要想了解T C P / I P協議的有關詳情,請參閱RFC 793 文件。可在h t t p : / / w w w. r f c -e d i t o r. o rg那里找到這份文件。

c o n n e c t函數和W S A C o n n e c t函數
最后一步就是連接。這是通過調用c o n n e c t函數或W S A C o n n e c t函數來完成的。我們先來看看該函數的Winsock 1版本,其定義如下:

int connect(
???????SOCKET s,
???????const struct sockaddr FAR * addr,
???????int namelen
??????);
?
?該函數的參數是相當清楚的: s是即將在其上面建立連接的那個有效T C P套接字; n a m e是針對T C P(說明連接的服務器)的套接字地址結構( S O C K A D D R _ I N);n a m e l e n則是名字參數的長度。Winsock 2版本中,它的定義是這樣的:

int WSAConnect(
????????SOCKET s,
????????const struct sockaddr FAR * addr,
????????int namelen,
????????LPWSABUF?lpCallerData,
????????LPWSABUF?lpCalleeData,
????????LPQOS???lpSQOS,
????????LPQOS???lpGQOS
???????);
???????
前三個參數和connect API函數的參數是完全一樣的。另外兩個參數—l p C a l l e r D a t a和l p C a l l e e D a t a,是字串緩沖區,用于收發請求連接時的數據。l p C a l l e r D a t a參數是指向緩沖區的指針,緩沖區內包含客戶機向服務器發出的請求連接的數據。l p C a l l e e D a t a參數則指向另一個緩沖區,區內包含服務器向客戶機返回的建立連接時的數據。這兩個參數都是W S A B U F結構,
因此,若是l p C a l l e r D a t a,l e n字段應該設為b u f字段中準備傳輸的數據長度。若是l p C a l l e e D a t a,l e n字段則代表b u f中的緩沖區長度,設為從服務器返回的數據長度。最后兩個參數—l p S Q O S和l p G Q O S,表示Q O S結構,該結構對即將建立的連接上收發數據所需要的帶寬進行了定義。
l p Q O S參數用于指定套接字s需要的服務質量,而l p G Q O S則用于指定套接字組所需要的服務質量。目前,尚未提供對套接字組的支持。若l p Q O S是空值,則表明沒有某應用專用的Q O S。
如果你想連接的計算機沒有監聽指定端口這一進程, c o n n e c t調用就會失敗,并發生錯誤W S A E C O N N R E F U S E D。另一個錯誤可能是W S A E T I M E D O U T,這種情況一般發生在試圖連接的計算機不能用時(亦可能因為到主機之間的路由上出現硬件故障或主機目前不在網上)。

Posted on 2006-09-07 22:31 艾凡赫 閱讀(688) 評論(0)  編輯 收藏 引用 所屬分類: 網絡編程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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网站| 欧美国产视频在线| 亚洲电影在线播放| 欧美精品一区二区三区一线天视频| 午夜精品一区二区三区在线视 | 欧美理论大片| 久久九九国产| 性欧美大战久久久久久久免费观看| 91久久精品国产91久久性色tv| 夜夜嗨av色一区二区不卡| 亚洲高清在线观看一区| 国产视频在线观看一区二区三区| 欧美日韩另类丝袜其他| 欧美精品v日韩精品v韩国精品v | 国产精品成人一区二区三区夜夜夜| 欧美资源在线| 午夜视频精品| 午夜精品999| 午夜精品久久一牛影视| 99视频精品| 一本色道久久综合亚洲精品小说| 亚洲激情成人网| 欧美国产日韩一区| 欧美福利电影网| 亚洲国产精品成人va在线观看| 亚洲国产精品一区制服丝袜| 老牛嫩草一区二区三区日本 | 国产精品青草久久| 欧美日韩精品一区二区| 欧美日韩国产首页| 欧美日韩中文| 国产欧美一区二区精品性| 禁久久精品乱码| 尤物九九久久国产精品的分类| 国产亚洲欧美一区二区三区| 韩国亚洲精品| 亚洲国产专区校园欧美| 一本久久a久久免费精品不卡| 亚洲天堂偷拍| 亚洲综合久久久久| 久久成人免费日本黄色| 免费短视频成人日韩| 久久精品国产77777蜜臀| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲欧洲精品一区二区三区| 国产欧美一区二区三区另类精品| 国产深夜精品| 欧美在线免费| 久久www免费人成看片高清 | 欧美一区二区在线免费观看| 欧美中文在线观看| 欧美激情一区二区三区全黄 | 国产欧美日韩三级| 在线成人小视频| 亚洲私人影院在线观看| 久久噜噜噜精品国产亚洲综合| 欧美国产在线电影| 午夜精品www| 欧美va天堂在线| 国产日韩视频一区二区三区| 亚洲人成人99网站| 久久亚洲春色中文字幕| 9久re热视频在线精品| 久久精品国产第一区二区三区最新章节 | 亚洲国产成人91精品| 黑人极品videos精品欧美裸| 伊人成年综合电影网| 国产伦精品一区二区三区| 国产亚洲一级| 亚洲天堂久久| 亚洲视频一二| 久久久久久夜| 蜜桃久久精品乱码一区二区| 欧美国产成人精品| 亚洲欧美日韩精品久久久| 免费亚洲一区| 韩日精品中文字幕| 亚洲欧美日韩国产一区| 香蕉久久久久久久av网站| 欧美成人一品| 欧美电影免费观看网站| 久久av一区二区三区亚洲| 国产精品美女一区二区在线观看| 日韩视频亚洲视频| 欧美激情一区二区三区高清视频| 亚洲欧美日韩一区二区三区在线观看| 欧美日韩一区二区视频在线观看| 在线观看日韩国产| 久久久久久久999精品视频| 亚洲一区免费看| 国产精品免费看久久久香蕉| 在线一区二区三区四区五区| 亚洲激情午夜| 欧美日韩国产综合一区二区| 欧美精品久久天天躁| 亚洲国产日韩欧美| 免费观看日韩| 久久综合久久88| 亚洲伦理网站| 洋洋av久久久久久久一区| 欧美日韩一区二区视频在线观看| 国产在线观看精品一区二区三区| 亚洲午夜伦理| 久久人人爽人人| 久久色在线播放| 亚洲日本va午夜在线电影| 欧美成人亚洲成人| 欧美国产日韩在线观看| av不卡在线观看| 亚洲在线电影| 国产欧美日韩精品丝袜高跟鞋| 欧美专区日韩专区| 久久精品五月| 亚洲欧洲日本mm| 一区二区三区免费观看| 久久综合精品国产一区二区三区| 最新中文字幕一区二区三区| 亚洲美女在线看| 国产欧美一区二区三区国产幕精品| 麻豆91精品| 欧美日韩亚洲一区二区三区四区| 亚洲欧美日韩成人| 羞羞色国产精品| 最近看过的日韩成人| 中文国产一区| 亚洲第一偷拍| 99国产精品国产精品久久| 国产亚洲高清视频| 亚洲精品免费电影| 国产日韩高清一区二区三区在线| 欧美成人精精品一区二区频| 欧美午夜激情小视频| 久久久久久电影| 国产精品成人观看视频国产奇米| 免费久久99精品国产自| 欧美日韩精品免费观看| 久久婷婷av| 亚洲女性喷水在线观看一区| 欧美日韩国产一区二区三区| 香港久久久电影| 欧美激情亚洲另类| 欧美一区日韩一区| 欧美日韩亚洲成人| 欧美高清在线播放| 欧美xx69| 夜夜嗨av色综合久久久综合网| 欧美黄色网络| 国产精品久久一卡二卡| 亚洲免费中文| 老司机免费视频一区二区三区| 亚洲大胆在线| 午夜精彩国产免费不卡不顿大片| 国产精品入口日韩视频大尺度| 欧美刺激午夜性久久久久久久| 欧美日韩国产综合新一区| 国产精品青草久久| 亚洲二区在线视频| 国产伦精品一区二区三区高清版| 国产欧美一区二区视频| 免费一级欧美片在线播放| 亚洲精品在线电影| 在线亚洲+欧美+日本专区| 亚洲国产成人久久综合| 亚洲你懂的在线视频| 国产视频在线观看一区| 最新69国产成人精品视频免费| 国产伊人精品| 欧美不卡视频一区| 一区二区亚洲欧洲国产日韩| 午夜在线精品偷拍| 欧美一区二区在线看| 欧美日韩在线观看一区二区三区| 91久久精品国产| 日韩午夜在线观看视频| 毛片一区二区三区| 最新精品在线| 亚洲精品视频在线观看网站| 欧美1区2区3区| 日韩天天综合| 免费看的黄色欧美网站| 亚洲最快最全在线视频| 欧美国产日韩一区二区在线观看 | 国模一区二区三区| 欧美日韩国产一区二区三区地区 | 亚洲欧洲日本在线| 国产日韩欧美麻豆| 欧美日韩一区二区在线观看视频| 久久久久久黄| 午夜精品影院| 亚洲一区二区成人| 日韩视频中文字幕| 亚洲国产精品一区| 韩国三级在线一区| 国产精品欧美激情|