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

chaosuper85

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  118 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks
域名服務(wù)(DNS)   如果你不知道 DNS 的意思,那么我告訴你,它代表域名服務(wù)(Domain Name Service)。它主要的功能是:你給它一個(gè)容易記憶的某站點(diǎn)的地址, 它給你 IP 地址(然后你就可以使用 bind(), connect(), sendto() 或者其它 函數(shù)) 。當(dāng)一個(gè)人輸入:    $ telnet whitehouse.gov telnet 能知道它將連接 (connect()) 到 "198.137.240.100"。 但是這是如何工作的呢? 你可以調(diào)用函數(shù) gethostbyname(): #include   struct hostent *gethostbyname(const char *name); 很明白的是,它返回一個(gè)指向 struct hostent 的指針。這個(gè)數(shù)據(jù)結(jié)構(gòu) 是這樣的:    struct hostent {    char *h_name;    char **h_aliases;    int h_addrtype;    int h_length;    char **h_addr_list;    };    #define h_addr h_addr_list[0] 這里是這個(gè)數(shù)據(jù)結(jié)構(gòu)的詳細(xì)資料: struct hostent:   h_name – 地址的正式名稱。   h_aliases – 空字節(jié)-地址的預(yù)備名稱的指針。   h_addrtype –地址類型; 通常是AF_INET。   h_length – 地址的比特長度。   h_addr_list – 零字節(jié)-主機(jī)網(wǎng)絡(luò)地址指針。網(wǎng)絡(luò)字節(jié)順序。   h_addr - h_addr_list中的第一地址。 gethostbyname() 成功時(shí)返回一個(gè)指向結(jié)構(gòu)體 hostent 的指針,或者 是個(gè)空 (NULL) 指針。(但是和以前不同,不設(shè)置errno,h_errno 設(shè)置錯(cuò) 誤信息。請看下面的 herror()。) 但是如何使用呢? 有時(shí)候(我們可以從電腦手冊中發(fā)現(xiàn)),向讀者灌輸 信息是不夠的。這個(gè)函數(shù)可不象它看上去那么難用。 這里是個(gè)例子: #include   #include   #include   #include   #include   #include int main(int argc, char *argv[])    {    struct hostent *h; if (argc != 2) { /* 檢查命令行 */    fprintf(stderr,"usage: getip address\n");    exit(1);    } if ((h=gethostbyname(argv[1])) == NULL) { /* 取得地址信息 */    herror("gethostbyname");    exit(1);    } printf("Host name : %s\n", h->h_name);   printf("IP Address : %s\n",inet_ntoa(*((struct in_addr *)h->h_addr))); return 0;    } 在使用 gethostbyname() 的時(shí)候,你不能用 perror() 打印錯(cuò)誤信息 (因?yàn)?errno 沒有使用),你應(yīng)該調(diào)用 herror()。 相當(dāng)簡單,你只是傳遞一個(gè)保存機(jī)器名的字符串(例如 "whitehouse.gov") 給 gethostbyname(),然后從返回的數(shù)據(jù)結(jié)構(gòu) struct hostent 中獲取信息。 唯一也許讓人不解的是輸出 IP 地址信息。h->h_addr 是一個(gè) char *, 但是 inet_ntoa() 需要的是 struct in_addr。因此,我轉(zhuǎn)換 h->h_addr 成 struct in_addr *,然后得到數(shù)據(jù)。 -------------------------------------------------------------------------------- 客戶-服務(wù)器背景知識   這里是個(gè)客戶--服務(wù)器的世界。在網(wǎng)絡(luò)上的所有東西都是在處理客戶進(jìn) 程和服務(wù)器進(jìn)程的交談。舉個(gè)telnet 的例子。當(dāng)你用 telnet (客戶)通過23 號端口登陸到主機(jī),主機(jī)上運(yùn)行的一個(gè)程序(一般叫 telnetd,服務(wù)器)激活。 它處理這個(gè)連接,顯示登陸界面,等等。 圖2:客戶機(jī)和服務(wù)器的關(guān)系 圖 2 說明了客戶和服務(wù)器之間的信息交換。 注意,客戶--服務(wù)器之間可以使用SOCK_STREAM、SOCK_DGRAM 或者其它(只要它們采用相同的)。一些很好的客戶--服務(wù)器的例子有 telnet/telnetd、 ftp/ftpd 和 bootp/bootpd。每次你使用 ftp 的時(shí)候,在遠(yuǎn) 端都有一個(gè) ftpd 為你服務(wù)。 一般,在服務(wù)端只有一個(gè)服務(wù)器,它采用 fork() 來處理多個(gè)客戶的連 接。基本的程序是:服務(wù)器等待一個(gè)連接,接受 (accept()) 連接,然后 fork() 一個(gè)子進(jìn)程處理它。這是下一章我們的例子中會(huì)講到的。 -------------------------------------------------------------------------------- 簡單的服務(wù)器   這個(gè)服務(wù)器所做的全部工作是在流式連接上發(fā)送字符串 "Hello, World!\n"。你要測試這個(gè)程序的話,可以在一臺機(jī)器上運(yùn)行該程序,然后 在另外一機(jī)器上登陸:    $ telnet remotehostname 3490 remotehostname 是該程序運(yùn)行的機(jī)器的名字。 服務(wù)器代碼: #include   #include   #include   #include   #include   #include   #include   #include #define MYPORT 3490 /*定義用戶連接端口*/ #define BACKLOG 10 /*多少等待連接控制*/ main()    {    int sockfd, new_fd; /* listen on sock_fd, new connection on new_fd */    struct sockaddr_in my_addr; /* my address information */    struct sockaddr_in their_addr; /* connector's address information */    int sin_size; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {    perror("socket");    exit(1);    } my_addr.sin_family = AF_INET; /* host byte order */    my_addr.sin_port = htons(MYPORT); /* short, network byte order */    my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP */    bzero(&(my_addr.sin_zero),; /* zero the rest of the struct */ if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1) {    perror("bind");    exit(1);    } if (listen(sockfd, BACKLOG) == -1) {    perror("listen");    exit(1);    } while(1) { /* main accept() loop */    sin_size = sizeof(struct sockaddr_in);    if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, \    &sin_size)) == -1) {    perror("accept");    continue;    }    printf("server: got connection from %s\n", \    inet_ntoa(their_addr.sin_addr));    if (!fork()) { /* this is the child process */    if (send(new_fd, "Hello, world!\n", 14, 0) == -1)    perror("send");    close(new_fd);    exit(0);    }    close(new_fd); /* parent doesn't need this */ while(waitpid(-1,NULL,WNOHANG) > 0); /* clean up child processes */    }    } 如果你很挑剔的話,一定不滿意我所有的代碼都在一個(gè)很大的main() 函數(shù)中。如果你不喜歡,可以劃分得更細(xì)點(diǎn)。 你也可以用我們下一章中的程序得到服務(wù)器端發(fā)送的字符串。 -------------------------------------------------------------------------------- 簡單的客戶程序   這個(gè)程序比服務(wù)器還簡單。這個(gè)程序的所有工作是通過 3490 端口連接到命令行中指定的主機(jī),然后得到服務(wù)器發(fā)送的字符串。 客戶代碼: #include   #include   #include   #include   #include   #include   #include   #include #define PORT 3490 /* 客戶機(jī)連接遠(yuǎn)程主機(jī)的端口 */ #define MAXDATASIZE 100 /* 每次可以接收的最大字節(jié) */ int main(int argc, char *argv[])    {    int sockfd, numbytes;    char buf[MAXDATASIZE];    struct hostent *he;    struct sockaddr_in their_addr; /* connector's address information */ if (argc != 2) {    fprintf(stderr,"usage: client hostname\n");    exit(1);    } if ((he=gethostbyname(argv[1])) == NULL) { /* get the host info */    herror("gethostbyname");    exit(1);    } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {    perror("socket");    exit(1);    } their_addr.sin_family = AF_INET; /* host byte order */   their_addr.sin_port = htons(PORT); /* short, network byte order */   their_addr.sin_addr = *((struct in_addr *)he->h_addr);   bzero(&(their_addr.sin_zero),; /* zero the rest of the struct */ if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1) {    perror("connect");    exit(1);    } if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1) {    perror("recv");    exit(1);    } buf[numbytes] = '\0'; printf("Received: %s",buf); close(sockfd); return 0;    } 注意,如果你在運(yùn)行服務(wù)器之前運(yùn)行客戶程序,connect() 將返回 "Connection refused" 信息,這非常有用。 --------------------------------------------------------------------------------
posted on 2010-01-16 21:46 chaosuper 閱讀(155) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(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>
            国产日韩欧美精品| 国产精品午夜在线| 亚洲人成啪啪网站| 欧美激情第3页| 欧美成人免费观看| 在线亚洲自拍| 亚洲免费一在线| 激情成人综合网| 欧美成人午夜激情视频| 亚洲精品日韩在线观看| 亚洲欧美日韩第一区| 久久中文字幕一区二区三区| 欧美日韩日日骚| 午夜精品久久久99热福利| 欧美ed2k| 欧美日韩在线视频首页| 激情久久久久久久久久久久久久久久 | 国产精品视频久久| 先锋影音久久久| 久久久综合网| 亚洲男同1069视频| 久久一区欧美| 亚洲在线中文字幕| 久久香蕉国产线看观看av| 国产精品性做久久久久久| 日韩一级在线观看| 午夜精品久久久久久久久| 欧美日韩高清在线| 欧美一级久久久久久久大片| 最新国产の精品合集bt伙计| 欧美在线亚洲一区| 日韩一区二区精品视频| 美女精品自拍一二三四| 午夜精品999| 99视频+国产日韩欧美| 欧美成人综合一区| 国产精品区免费视频| 亚洲网站在线播放| 久久人人爽人人爽爽久久| 国产综合一区二区| 99亚洲视频| 最新亚洲一区| 欧美中文日韩| 午夜一区二区三视频在线观看| 亚洲欧洲在线一区| 加勒比av一区二区| av成人天堂| 亚洲人成网站影音先锋播放| 亚洲国产精品悠悠久久琪琪| 免费成人你懂的| 久久久99爱| 国产精品进线69影院| 亚洲欧美一级二级三级| 亚洲婷婷国产精品电影人久久| 欧美日韩一区二区三区四区在线观看 | 欧美日一区二区三区在线观看国产免| 久久久综合激的五月天| 久久九九国产精品怡红院| 国产亚洲视频在线| 亚洲女性裸体视频| 亚洲天堂免费观看| 欧美久久久久久久久| 欧美亚洲专区| 国产精品乱码久久久久久| 久久精品国产亚洲精品| 久久久久久亚洲精品杨幂换脸| 极品少妇一区二区三区| 欧美国产一区二区三区激情无套| 欧美.日韩.国产.一区.二区| 日韩视频国产视频| 欧美精品成人一区二区在线观看 | 国产一区二区三区电影在线观看| 久久久www成人免费毛片麻豆| 久久精品成人| 免费在线观看精品| 亚洲精品社区| 欧美日韩调教| 亚洲午夜三级在线| 久久激情综合网| 在线观看欧美亚洲| 欧美jizz19性欧美| 99精品国产在热久久下载| 国产亚洲在线| 噜噜噜91成人网| 亚洲国产精品t66y| 亚洲影视综合| 国产区在线观看成人精品| 亚洲国产女人aaa毛片在线| 国产精品伦一区| 欧美在线高清| 欧美激情一区二区| 亚洲一区二区三区激情| 久久久国际精品| 亚洲黄色在线视频| 亚洲免费一区二区| 精品9999| 欧美日韩国产综合视频在线观看中文 | 亚洲欧美日韩专区| 国产一区二区丝袜高跟鞋图片| 亚洲精品综合| 欧美在线啊v| 亚洲欧洲偷拍精品| 国产精品视频久久| 免费亚洲电影在线| 亚洲欧美影音先锋| 亚洲国内自拍| 久久精品国产欧美亚洲人人爽| 欧美三区在线| 久久青草欧美一区二区三区| 欧美在线日韩| 亚洲免费观看在线观看| 久久综合色8888| 亚洲影视九九影院在线观看| 野花国产精品入口| 黄色一区三区| 国产精品久久久久久av下载红粉 | 久久成人资源| 99亚洲一区二区| 国语自产精品视频在线看8查询8| 亚洲欧美春色| 亚洲区中文字幕| 免费在线亚洲欧美| 久久精品一区中文字幕| 国产香蕉久久精品综合网| 亚洲欧美文学| 亚洲另类在线一区| 亚洲国产精品成人| 蜜桃精品久久久久久久免费影院| 国产亚洲精品激情久久| 欧美在线视频一区二区三区| 久久久久久久久伊人| 国产亚洲成av人片在线观看桃| 香蕉久久一区二区不卡无毒影院| 久久电影一区| 午夜精品成人在线视频| 国产欧美大片| 国产精品日韩在线观看| 小黄鸭精品密入口导航| 久久综合色88| 鲁大师成人一区二区三区| 亚洲国产一成人久久精品| 欧美国产日韩一二三区| 一本大道久久精品懂色aⅴ| 午夜久久影院| 欧美在线播放一区二区| 亚洲二区免费| 伊人狠狠色丁香综合尤物| 蜜桃久久精品乱码一区二区| 亚洲人体大胆视频| 亚洲乱码视频| 一区二区三区四区蜜桃| 久久久国产视频91| 久久在线视频| 模特精品在线| 亚洲国产精品久久久久婷婷884 | 亚洲激情在线播放| 亚洲激情一区二区| 99日韩精品| 亚洲综合色丁香婷婷六月图片| 国产日韩欧美在线播放| 蜜臀久久99精品久久久画质超高清 | 日韩一区二区精品| 亚洲无亚洲人成网站77777| 国产日韩欧美综合一区| 美女脱光内衣内裤视频久久网站| 亚洲美女中出| 亚洲永久精品大片| 欧美专区在线观看一区| 亚洲美女av网站| 亚洲午夜激情网页| 久久精品在线免费观看| 国产精品99久久久久久久女警 | 亚洲国产精品欧美一二99| 亚洲一区二区精品在线| 激情综合久久| 99亚洲视频| 欧美一区二区三区四区视频| 亚洲精品乱码久久久久久日本蜜臀| 国产精品欧美日韩一区二区| 欧美高清视频一二三区| 久久精品99国产精品| 这里只有精品视频| 久久久蜜桃精品| 欧美日韩一视频区二区| 欧美福利专区| 国产日韩欧美一区二区| 国产精品九九| 亚洲人成在线播放| 午夜日本精品| 亚洲国产精品www| 欧美在线网址| 国产精品第2页| 亚洲另类在线一区| 久久久精品久久久久| 久久天堂精品| 亚洲视频在线二区| 农村妇女精品| 136国产福利精品导航网址| 狠狠色香婷婷久久亚洲精品| 国产亚洲一级高清|