• <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>

            .7.3.3 數(shù)據(jù)傳輸
            收發(fā)數(shù)據(jù)是網(wǎng)絡(luò)編程的主題。要在已建立連接的套接字上接收數(shù)據(jù),可用這兩個(gè)A P I函數(shù):
            s e n d和W S A S e n d。第二個(gè)函數(shù)是Winsock 2中專有的。同樣地,在已建立了連接的套接字上接收數(shù)據(jù)也有兩個(gè)函數(shù): r e c v和W S A R e c v。后者也是Winsock 2函數(shù)。

            必須牢牢記住這一點(diǎn):所有關(guān)系到收發(fā)數(shù)據(jù)的緩沖都屬于簡單的c h a r類型。也就是說,這些函數(shù)沒有“U n i c o d e”版本。

            另外,所有收發(fā)函數(shù)返回的錯(cuò)誤代碼都是S O C K E T _ E R R O R。一旦返回錯(cuò)誤,系統(tǒng)就會(huì)調(diào)用W S A G e t L a s t E r r o r獲得詳細(xì)的錯(cuò)誤信息。最常見的錯(cuò)誤是W S A E C O N N A B O RT E D和W S A E C O N N R E S E T。兩者均涉及到即將關(guān)閉連接這一問題—要么通過超時(shí),要么通過通信方關(guān)閉連接。另一個(gè)常見錯(cuò)誤是W S A E W O U L D B L O C K,一般出現(xiàn)在套接字處于非暫停模
            式或異步狀態(tài)時(shí)。這個(gè)錯(cuò)誤主要意味著指定函數(shù)暫不能完成。

            1. send和W S A S e n d
            要在已建立連接的套接字上發(fā)送數(shù)據(jù),第一個(gè)可用的A P I函數(shù)是s e n d,其原型為:

            int send(
            ?????SOCKET s,
            ?????const char FAR * buf,
            ?????int len,
            ?????int flags
            ????);
            S O C K E T參數(shù)是已建立連接的套接字,將在這個(gè)套接字上發(fā)送數(shù)據(jù)。第二個(gè)參數(shù)b u f,則是字符緩沖區(qū),區(qū)內(nèi)包含即將發(fā)送的數(shù)據(jù)。第三個(gè)參數(shù)l e n,指定即將發(fā)送的緩沖區(qū)內(nèi)的字符數(shù)。最后,f l a g s可為0、M S G _ D O N T R O U T E或M S G _ O O B。另外, f l a g s還可以是對(duì)那些標(biāo)志進(jìn)行按位“或運(yùn)算”的一個(gè)結(jié)果。M S G _ D O N T R O U T E標(biāo)志要求傳送層不要將它發(fā)出的包路
            由出去。由基層的傳送決定是否實(shí)現(xiàn)這一請(qǐng)求(例如,若傳送協(xié)議不支持該選項(xiàng),這一請(qǐng)求就會(huì)被忽略)。M S G _ O O B標(biāo)志預(yù)示數(shù)據(jù)應(yīng)該被帶外發(fā)送。
            對(duì)返回?cái)?shù)據(jù)而言,s e n d返回發(fā)送的字節(jié)數(shù);若發(fā)生錯(cuò)誤,就返回S O C K E T _ E R R O R。常見的錯(cuò)誤是W S A E C O N N A B O RT E D,這一錯(cuò)誤一般發(fā)生在虛擬回路由于超時(shí)或協(xié)議有錯(cuò)而中斷的時(shí)候。發(fā)生這種情況時(shí),應(yīng)該關(guān)閉這個(gè)套接字,因?yàn)樗荒茉儆昧恕_h(yuǎn)程主機(jī)上的應(yīng)用通過執(zhí)行強(qiáng)行關(guān)閉或意外中斷操作重新設(shè)置虛擬虛路時(shí),或遠(yuǎn)程主機(jī)重新啟動(dòng)時(shí),發(fā)生的則是W S A E C O N N R E S E T錯(cuò)誤。再次提醒大家注意,發(fā)生這一錯(cuò)誤時(shí),應(yīng)該關(guān)閉這個(gè)套接字。最
            后一個(gè)常見錯(cuò)誤是W S A E T I M E O U T,它發(fā)生在連接由于網(wǎng)絡(luò)故障或遠(yuǎn)程連接系統(tǒng)異常死機(jī)而引起的連接中斷時(shí)。
            send API函數(shù)的Winsock 2版本是W S A S e n d,它的定義如下:

            int WSASend(
            ???????SOCKET s,
            ???????LPWSABUF lpBuffers,
            ???????DWORD???dwBufferCount,
            ???????LPWORD??lpNumberOfBytesSent,
            ???????DWORD???dwFlags,
            ???????LPWSAOVERLAPPED?lpOverlapped,
            ???????LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE
            ??????);
            這個(gè)套接字是一個(gè)連接會(huì)話的有效句柄。第二個(gè)參數(shù)是指向一個(gè)或多個(gè)W S A B U F結(jié)構(gòu)的指針。它既可是一個(gè)獨(dú)立的結(jié)構(gòu),又可以是一組結(jié)構(gòu)。第三個(gè)參數(shù)指明準(zhǔn)備投遞的W S A B U F結(jié)構(gòu)數(shù)。記住,每個(gè)W S A B U F結(jié)構(gòu)本身就是一個(gè)字符緩沖和緩沖長度。為何打算同時(shí)發(fā)送多個(gè)緩沖呢?也許大家不太明白其中的原因。這就是我們稍后要講的“分散集中I / O模式”;但是,在一個(gè)已建立連接的套接字上利用多緩沖來發(fā)送數(shù)據(jù)時(shí),順序是從第一個(gè)到最后一個(gè)W S A B U F結(jié)構(gòu)。l p N u m b e r O f B y t e s S e n t是指向D W O R D(是W S A S e n d調(diào)用返回的)的指針,其中包含字節(jié)總發(fā)送數(shù)。d w F l a g s參數(shù)相當(dāng)于它在s e n d中的等同物。最后兩個(gè)參數(shù)—l p O v e r l a p p e d和l p C o m p l e t i o n R O U T I N E—用于重疊I / O。重疊I / O是Wi n s o c k支持的異步I / O模式之一,

            W S A S e n d函數(shù)把l p N u m b e r O f B y t e s S e n t設(shè)為寫入的字節(jié)數(shù)。成功的話,該函數(shù)就返回0,
            否則就返回S O C K _ E R R O R,常見錯(cuò)誤和s e n d函數(shù)的情形一樣。

            2. WSASendDisconnect
            該函數(shù)非常特殊,一般不用。其原型是:

            int WSASendDisconnect(?
            ????????????SOCKET s,
            ????????????LPWSABUF lpOUTboundDisconnectData
            ???????????);

            該函數(shù)起初將套接字置為關(guān)閉狀態(tài),發(fā)送無連接的數(shù)據(jù)。當(dāng)然,它只能用于支持從容關(guān)機(jī)和無連接數(shù)據(jù)的傳輸協(xié)議。目前還沒有傳輸提供者支持無連接的數(shù)據(jù)。W S A S e n d D i s c o n n e c t函數(shù)的行為和利用S D _ S E N D參數(shù)調(diào)用s h u t d o w n 函數(shù)差不多,但它另外還要發(fā)送包含在b o u n d D i s c o n n e c t D a t a參數(shù)中的數(shù)據(jù)。后來的數(shù)據(jù)禁止在這個(gè)套接字上發(fā)送。如果調(diào)用失敗,
            W S A S e n d D i s c o n n e c t i o n就會(huì)返回S O C K E T _ E R R O R。使用該函數(shù)可能會(huì)出現(xiàn)s e n d函數(shù)中出現(xiàn)的某些錯(cuò)誤。

            帶外數(shù)據(jù)
            對(duì)已建立連接的流套接字上的應(yīng)用來說,如果需要發(fā)送的數(shù)據(jù)比流上的普通數(shù)據(jù)重要得多,便可將這些重要數(shù)據(jù)標(biāo)記成“帶外數(shù)據(jù)”(Out-of-band, OOB)。位于連接另一端的應(yīng)用可通過一個(gè)獨(dú)立的邏輯信道(從概念上講,該邏輯信道與數(shù)據(jù)流無關(guān))來接收和處理O O B數(shù)據(jù)。
            在T C P中,O O B數(shù)據(jù)由一個(gè)緊急1位標(biāo)記(叫作U R G)和T C P分段頭中的一個(gè)1 6位的指針組成。這里的標(biāo)記和指針把指定的下行流字節(jié)當(dāng)作緊急數(shù)據(jù)。實(shí)現(xiàn)緊急數(shù)據(jù)的兩種特殊方法目前只能在T C P.RFC 793中見到,該索引對(duì)T C P進(jìn)行了描述,并引入了“緊急數(shù)據(jù)”這一概念,表明T C P頭中的緊急指針是緊急數(shù)據(jù)字節(jié)之后那個(gè)字節(jié)的絕對(duì)偏移。但是在RFC 11 2 2中,卻將緊急偏移描述成指向緊急字節(jié)本身。
            Wi n s o c k規(guī)格中,與協(xié)議無關(guān)的O O B數(shù)據(jù)和T C P的O O B數(shù)據(jù)實(shí)施(緊急數(shù)據(jù))均采用了O O B這一術(shù)語。要查看待發(fā)數(shù)據(jù)中是否包含緊急數(shù)據(jù),必須通過S I O C AT M A R K選項(xiàng)調(diào)用i o c t l s o c k e t函數(shù)。第9章將介紹S I O C AT M A R K的用法。
            Wi n s o c k提供了獲得緊急數(shù)據(jù)的幾個(gè)方法。一是緊急數(shù)據(jù)一旦在線插入,它就會(huì)出現(xiàn)在普通數(shù)據(jù)流中;二是可以關(guān)閉在線插入,這樣,不連續(xù)調(diào)用接收函數(shù)就會(huì)只返回緊急數(shù)據(jù)。至于控制O O B數(shù)據(jù)行為的套接字選項(xiàng)S O _ O O B I N L I N E,我們也將在第9章詳細(xì)討論。

            Te l n e t和R l o g i n使用緊急數(shù)據(jù)是有原因的。盡管如此,除非你計(jì)劃編寫自己的Te l n e t和R l o g i n,否則就應(yīng)該遠(yuǎn)離緊急數(shù)據(jù)。因?yàn)樗蝗菀锥x,而且其他平臺(tái)上的實(shí)施情況可能和Wi n 3 2有所不同。在迫不得已的情況下使用緊急數(shù)據(jù),必須發(fā)信號(hào)通知通信方為緊急數(shù)據(jù)執(zhí)行
            一個(gè)獨(dú)立的控制套接字,并為普通數(shù)據(jù)的傳輸保留主要的套接字連接。

            Posted on 2006-09-07 22:31 艾凡赫 閱讀(636) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程
            18岁日韩内射颜射午夜久久成人| 亚州日韩精品专区久久久| 亚洲精品99久久久久中文字幕| 久久无码高潮喷水| 99久久免费国产特黄| 久久97久久97精品免视看| 伊人久久大香线蕉亚洲五月天| 久久精品一区二区三区不卡| 7777精品伊人久久久大香线蕉| 亚洲精品午夜国产VA久久成人| 久久国产综合精品五月天| 久久久精品2019免费观看| 欧美精品福利视频一区二区三区久久久精品| 久久久久久夜精品精品免费啦 | 99久久无色码中文字幕| 久久九九全国免费| 久久精品国产99国产精品亚洲| 欧美久久一区二区三区| 久久亚洲精品无码aⅴ大香| 久久亚洲精品中文字幕三区| 国产精品亚洲综合久久| 97精品久久天干天天天按摩| 久久精品日日躁夜夜躁欧美| 亚洲国产成人久久综合碰碰动漫3d | 日批日出水久久亚洲精品tv| 日韩精品久久无码中文字幕| 18岁日韩内射颜射午夜久久成人| 97久久精品人人澡人人爽| 久久午夜羞羞影院免费观看| 综合久久一区二区三区| 久久亚洲高清综合| 久久精品视频免费| 久久99精品国产麻豆婷婷| 久久精品天天中文字幕人妻| 亚洲伊人久久精品影院| 亚洲精品无码久久毛片| 久久99精品国产麻豆婷婷| 久久99国产精品成人欧美| 久久精品国产福利国产琪琪| 国产精品欧美久久久久无广告| 久久久久九国产精品|