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

不會(huì)飛的鳥

2010年12月10日 ... 不鳥他們!!! 我要用自己開發(fā)的分布式文件系統(tǒng)、分布式調(diào)度系統(tǒng)、分布式檢索系統(tǒng), 做自己的搜索引擎?。?!大魚有大志!!! ---楊書童

socket編程-預(yù)備知識(shí)

1. 預(yù)備知識(shí)

1.1. 網(wǎng)絡(luò)字節(jié)序

我們已經(jīng)知道,內(nèi)存中的多字節(jié)數(shù)據(jù)相對(duì)于內(nèi)存地址有大端和小端之分,磁盤文件中的多字節(jié)數(shù)據(jù)相對(duì)于文件中的偏移地址也有大端小端之分。網(wǎng)絡(luò)數(shù)據(jù)流同樣有大端小端之分,那么如何定義網(wǎng)絡(luò)數(shù)據(jù)流的地址呢?發(fā)送主機(jī)通常將發(fā)送緩沖區(qū)中的數(shù)據(jù)按內(nèi)存地址從低到高的順序發(fā)出,接收主機(jī)把從網(wǎng)絡(luò)上接到的字節(jié)依次保存在接收緩沖區(qū)中,也是按內(nèi)存地址從低到高的順序保存,因此,網(wǎng)絡(luò)數(shù)據(jù)流的地址應(yīng)這樣規(guī)定:先發(fā)出的數(shù)據(jù)是低地址,后發(fā)出的數(shù)據(jù)是高地址。

TCP/IP協(xié)議規(guī)定,網(wǎng)絡(luò)數(shù)據(jù)流應(yīng)采用大端字節(jié)序,即低地址高字節(jié)。例如上一節(jié)的UDP段格式,地址0-1是16位的源端口號(hào),如果這個(gè)端口號(hào)是1000(0x3e8),則地址0是0x03,地址1是0xe8,也就是先發(fā)0x03,再發(fā)0xe8,這16位在發(fā)送主機(jī)的緩沖區(qū)中也應(yīng)該是低地址存0x03,高地址存0xe8。但是,如果發(fā)送主機(jī)是小端字節(jié)序的,這16位被解釋成0xe803,而不是1000。因此,發(fā)送主機(jī)把1000填到發(fā)送緩沖區(qū)之前需要做字節(jié)序的轉(zhuǎn)換。同樣地,接收主機(jī)如果是小端字節(jié)序的,接到16位的源端口號(hào)也要做字節(jié)序的轉(zhuǎn)換。如果主機(jī)是大端字節(jié)序的,發(fā)送和接收都不需要做轉(zhuǎn)換。同理,32位的IP地址也要考慮網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的問題。

為使網(wǎng)絡(luò)程序具有可移植性,使同樣的C代碼在大端和小端計(jì)算機(jī)上編譯后都能正常運(yùn)行,可以調(diào)用以下庫(kù)函數(shù)做網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的轉(zhuǎn)換。

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);

這些函數(shù)名很好記,h表示host,n表示network,l表示32位長(zhǎng)整數(shù),s表示16位短整數(shù)。例如htonl表示將32位的長(zhǎng)整數(shù)從主機(jī)字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序,例如將IP地址轉(zhuǎn)換后準(zhǔn)備發(fā)送。如果主機(jī)是小端字節(jié)序,這些函數(shù)將參數(shù)做相應(yīng)的大小端轉(zhuǎn)換然后返回,如果主機(jī)是大端字節(jié)序,這些函數(shù)不做轉(zhuǎn)換,將參數(shù)原封不動(dòng)地返回。

1.2. socket地址的數(shù)據(jù)類型及相關(guān)函數(shù) 請(qǐng)點(diǎn)評(píng)

socket API是一層抽象的網(wǎng)絡(luò)編程接口,適用于各種底層網(wǎng)絡(luò)協(xié)議,如IPv4、IPv6,以及后面要講的UNIX Domain Socket。然而,各種網(wǎng)絡(luò)協(xié)議的地址格式并不相同,如下圖所示:

圖 37.1. sockaddr數(shù)據(jù)結(jié)構(gòu)

sockaddr數(shù)據(jù)結(jié)構(gòu)

IPv4和IPv6的地址格式定義在netinet/in.h中,IPv4地址用sockaddr_in結(jié)構(gòu)體表示,包括16位端口號(hào)和32位IP地址,IPv6地址用sockaddr_in6結(jié)構(gòu)體表示,包括16位端口號(hào)、128位IP地址和一些控制字段。UNIX Domain Socket的地址格式定義在sys/un.h中,用sockaddr_un結(jié)構(gòu)體表示。各種socket地址結(jié)構(gòu)體的開頭都是相同的,前16位表示整個(gè)結(jié)構(gòu)體的長(zhǎng)度(并不是所有UNIX的實(shí)現(xiàn)都有長(zhǎng)度字段,如Linux就沒有),后16位表示地址類型。IPv4、IPv6和UNIX Domain Socket的地址類型分別定義為常數(shù)AF_INET、AF_INET6、AF_UNIX。這樣,只要取得某種sockaddr結(jié)構(gòu)體的首地址,不需要知道具體是哪種類型的sockaddr結(jié)構(gòu)體,就可以根據(jù)地址類型字段確定結(jié)構(gòu)體中的內(nèi)容。因此,socket API可以接受各種類型的sockaddr結(jié)構(gòu)體指針做參數(shù),例如bind、accept、connect等函數(shù),這些函數(shù)的參數(shù)應(yīng)該設(shè)計(jì)成void *類型以便接受各種類型的指針,但是sock API的實(shí)現(xiàn)早于ANSI C標(biāo)準(zhǔn)化,那時(shí)還沒有void *類型,因此這些函數(shù)的參數(shù)都用struct sockaddr *類型表示,在傳遞參數(shù)之前要強(qiáng)制類型轉(zhuǎn)換一下,例如:

struct sockaddr_in servaddr;
/* initialize servaddr */
bind(listen_fd, (struct sockaddr *)&servaddr, sizeof(servaddr));

本節(jié)只介紹基于IPv4的socket網(wǎng)絡(luò)編程,sockaddr_in中的成員struct in_addr sin_addr表示32位的IP地址。但是我們通常用點(diǎn)分十進(jìn)制的字符串表示IP地址,以下函數(shù)可以在字符串表示和in_addr表示之間轉(zhuǎn)換。

字符串轉(zhuǎn)in_addr的函數(shù):

#include <arpa/inet.h>

int inet_aton(const char *strptr, struct in_addr *addrptr);
in_addr_t inet_addr(const char *strptr);
int inet_pton(int family, const char *strptr, void *addrptr);

in_addr轉(zhuǎn)字符串的函數(shù):

char *inet_ntoa(struct in_addr inaddr);
const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);

其中inet_pton和inet_ntop不僅可以轉(zhuǎn)換IPv4的in_addr,還可以轉(zhuǎn)換IPv6的in6_addr,因此函數(shù)接口是void *addrptr。

posted on 2011-07-03 14:00 不會(huì)飛的鳥 閱讀(403) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区三区免费视| 国产日韩欧美麻豆| 亚洲欧美日韩精品久久久| 亚洲六月丁香色婷婷综合久久| 亚洲电影中文字幕| 亚洲国产精品激情在线观看| 亚洲高清不卡在线观看| 亚洲精品老司机| 亚洲欧美日韩精品久久亚洲区 | 欧美激情1区2区| 欧美日韩在线综合| 国产欧美精品一区二区三区介绍 | 欧美黄污视频| 9色精品在线| 欧美在线视屏| 欧美激情小视频| 国产精品日本一区二区| 禁断一区二区三区在线| 日韩视频专区| 欧美综合国产| 亚洲经典在线看| 午夜一区二区三视频在线观看| 巨乳诱惑日韩免费av| 欧美日韩国产综合久久| 国产欧美日韩视频在线观看| 亚洲欧洲日产国产网站| 午夜一区二区三区不卡视频| 欧美激情aⅴ一区二区三区| 亚洲欧美在线高清| 欧美日韩在线综合| 亚洲精品乱码久久久久| 欧美在线关看| 99精品国产高清一区二区| 久久精品首页| 国产精品普通话对白| 欧美一区二区三区久久精品茉莉花 | 欧美.www| 国产在线乱码一区二区三区| 一本色道久久综合亚洲精品不 | 国产在线精品二区| 在线一区免费观看| 亚洲成人在线视频网站| 开心色5月久久精品| 亚洲免费电影在线观看| 久久综合久久综合久久| 国产精品资源| 午夜精品久久久久久久99黑人| 欧美激情在线播放| 久久精品免费电影| 国产欧美视频一区二区三区| 亚洲——在线| 99精品免费网| 欧美日韩影院| 亚洲少妇自拍| 亚洲色图自拍| 国产精品伦子伦免费视频| 亚洲一区二区视频| 亚洲午夜免费视频| 国产精品免费福利| 午夜免费久久久久| 亚洲欧美日韩在线不卡| 国产精品尤物福利片在线观看| 午夜宅男久久久| 午夜国产欧美理论在线播放| 国产欧美日韩精品一区| 久久久夜夜夜| 免费久久99精品国产自| 亚洲精品极品| 一区二区激情视频| 国产精品久久久一区麻豆最新章节 | 亚洲综合999| 中文久久精品| 国产一区二区欧美| 欧美不卡在线| 欧美精品免费播放| 亚洲专区欧美专区| 午夜精品免费| 亚洲成色精品| 亚洲精品美女| 国产喷白浆一区二区三区| 久久婷婷麻豆| 欧美紧缚bdsm在线视频| 欧美一级久久久久久久大片| 久久精品亚洲精品| 99热这里只有精品8| 亚洲一区免费| 在线视频国内自拍亚洲视频| 亚洲美女中文字幕| 妖精视频成人观看www| 国产精品久久网| 美女精品一区| 欧美视频在线观看免费| 久久久久久久久久久一区| 亚洲国产一区二区三区在线播| 欧美精品一区二区三区在线播放| 亚洲中字在线| 麻豆国产精品777777在线| 亚洲视频一区在线| 欧美一区观看| 宅男精品导航| 久久久久成人精品| 一区二区三区视频观看| 久久黄色影院| 亚洲免费视频观看| 免费人成网站在线观看欧美高清| 亚洲一二三区在线| 免费高清在线视频一区·| 亚洲女女女同性video| 久久麻豆一区二区| 午夜一区不卡| 欧美性色综合| 亚洲国产精品电影在线观看| 国产亚洲成年网址在线观看| 亚洲三级色网| 亚洲国产高清在线| 欧美主播一区二区三区| 亚洲欧美日韩在线综合| 欧美全黄视频| 欧美黄色aaaa| 1000部国产精品成人观看| 先锋影音久久久| 亚洲欧美日韩一区在线观看| 欧美日韩精品免费观看视频完整 | 欧美日韩国产va另类| 免费不卡欧美自拍视频| 国产日韩精品电影| 亚洲小视频在线观看| 夜夜嗨av一区二区三区四季av| 欧美在线视频一区二区| 欧美一区二区三区在线观看视频| 欧美特黄视频| 亚洲午夜精品国产| 亚洲在线网站| 国产精品视频最多的网站| 99国产一区| 在线亚洲免费| 欧美乱在线观看| 亚洲精品在线观看免费| 99av国产精品欲麻豆| 另类春色校园亚洲| 欧美xxxx在线观看| 在线观看成人av电影| 久久视频在线看| 欧美成人影音| 亚洲精品国产精品国产自| 欧美肥婆bbw| 亚洲人人精品| 亚洲免费视频观看| 国产欧美综合在线| 久久精品国产精品亚洲综合| 久久婷婷久久| 亚洲国产99| 久久精品免费看| 亚洲国产精品va在看黑人| 国产一区二区无遮挡| 欧美一级网站| 久热这里只精品99re8久| 亚洲欧洲日产国产综合网| 欧美成人免费在线视频| 亚洲精品无人区| 欧美一级久久| 亚洲黄色av一区| 国产日韩欧美亚洲一区| 性欧美xxxx大乳国产app| 国产精品资源在线观看| 久久久国产一区二区三区| 欧美成人日本| 亚洲一区不卡| 狠狠色丁香婷综合久久| 欧美大片在线观看| 亚洲字幕一区二区| 欧美福利一区| 香蕉成人久久| 亚洲国产欧美一区| 欧美偷拍一区二区| 久久久久久夜精品精品免费| 亚洲精品在线免费| 狼狼综合久久久久综合网 | 国产综合色一区二区三区| 久久综合给合久久狠狠色| 99精品久久久| 欧美大成色www永久网站婷| 亚洲一区二区三区高清| 国产小视频国产精品| 欧美日韩不卡在线| 久久精品在线观看| 亚洲精品日韩精品| 麻豆国产精品一区二区三区| 一区二区日韩免费看| 好吊日精品视频| 国产精品国产三级国产专播品爱网 | 亚洲欧美日本精品| 亚洲国产精品ⅴa在线观看 | 欧美久久久久久久久久| 亚洲婷婷免费| 亚洲人体一区| 亚洲国产精品久久久久婷婷884| 欧美一级大片在线免费观看| 亚洲欧洲在线视频| 黄色成人在线|