久久久国产精品秘人口麻豆|永久免费AV无语国产|人成电影免费中文字幕|久久AV嫩草影院2

    1. <dfn id="yitbn"><samp id="yitbn"><progress id="yitbn"></progress></samp></dfn>

          <div id="yitbn"></div>

          1. 查看全部128種考試
            軟件水平考試
             考試動態(tài) 報考指南 歷年真題 模擬試題 復(fù)習(xí)資料 心得技巧 專業(yè)英語 技術(shù)文章 軟考論壇 考試用書
             程序員 軟件設(shè)計師 網(wǎng)絡(luò)管理員 網(wǎng)絡(luò)工程師 系統(tǒng)分析師 數(shù)據(jù)庫系統(tǒng)工程師
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            ak47  
            【字體: 軟件設(shè)計師考試復(fù)習(xí)指導(dǎo):socket簡要
            軟件設(shè)計師考試復(fù)習(xí)指導(dǎo):socket簡要
            spks.eeeigo.com 來源:招生考試在線 更新:2005-4-26 22:07:00 軟件水平考試 考試論壇

                套接字結(jié)構(gòu)

            struct sockaddr_in
            {
            short int sin_family; //地址類型 AF_XXX(AF_UNIX,AF_INET和AF_NS)
            unsigned short int sin_port; //16位端口號
            struct in_addr sin_addr; //32位IP地址
            char sin_zero[8]; //保留
            } //端口號以及 Internet 地址使用的是網(wǎng)絡(luò)字節(jié)順序,需要通過函數(shù) htons 轉(zhuǎn)換 

                主機(jī)結(jié)構(gòu)

            struct hostent
            { char *h_name ; //主機(jī)的正式名稱
            char * *h_aliases ; //別名列表
            int h_addrtype ; //主機(jī)地址類型:AF_XXX
            lnt H_length; //主機(jī)地址長度:4 字節(jié)(32 位)
            char * *h_addr_list;//主機(jī) IP 地址列表
            }

                函數(shù)庫

                1. int socket(int domain,int type,int protocol);

                函數(shù) socket 創(chuàng)建一個套接字描述符,如果失敗返回 -1.domain為地址類型AF_XXX,type為套接字類型,SOCK_STREAM(TCP),SOCK_DGRAM (UDP),SOCK_RAW(IP、ICMP);protocol 指定協(xié)議 0為默認(rèn)模式 。

                2. int bind(int sockfd,struct sockaddr *hostaddr,int addrlen);

                函數(shù)bind將本地地址與套接字綁定在一起,成功返回0,失敗為-1,并設(shè)置全局變量errno為錯誤類型
            EADDRINUSER。

                3. int connect( int sockfd,struct sockaddr *servaddr, int addrlen);

                函數(shù)connect與服務(wù)器建立一個連接,成功返回 0,失敗返回- 1。servaddr 為遠(yuǎn)程服務(wù)器的套接字地址,包括服務(wù)器的 IP 地址和端口號;addrlen 為地址的長度。

                4. int accept(int sockfd,struct sockaddr *addr,int *addrlen)

                函數(shù)accept從listen的完成連接隊列中接收一個連接,如果連接隊列為空,則該進(jìn)程睡眠。

                5. int listen(int sockfd,int backlog);

                函數(shù)listen 將一個套接字轉(zhuǎn)換為傾聽套接字,執(zhí)行成功返回0,失敗為-1。backlog設(shè)置請求隊列的最大長度。

                6. int write( int fd,char *buf,int len);

                7. int read ( int fd,char *buf,int len);

                函數(shù)read和write從套接字讀和寫數(shù)據(jù),成功返回數(shù)據(jù)量大小,否則返回 -1.buf 指定數(shù)據(jù)緩沖區(qū),len 指定接收或發(fā)送的數(shù)據(jù)量大小。

                8. int close(int sockfd);

                函數(shù)close關(guān)閉一個套接字描述符,成功返回0,失敗為-1。

                9. struct hostent * gethostbyname( const char *hostname);

                函數(shù) gethostbyname 查詢指定的域名地址對應(yīng)的 IP 地址,返回一個 hostent結(jié)構(gòu)的指針,如果不成功返回 NULL。

                附帶函數(shù)

                htons()
                ntohs()
                htonl()
                ntohl()

                在寫整型數(shù)據(jù)前,先轉(zhuǎn)換一下:

                i= htonl(i);
                write_data(s, &i, sizeof(i));

                在讀整型數(shù)據(jù)后,再轉(zhuǎn)變回來:

                read_data(s, &i, sizeof(i));
                i= ntohl(i);

                示例

            #include /* obligatory includes */
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #define PORT 3490
            int main( int argc,char *argv[] )
            { int sockfd,nbytes; //套接字描述符、讀入緩沖區(qū)的字節(jié)數(shù)
            char buf[1024]; //緩沖區(qū)
            struct hostent *he; //主機(jī)信息類型
            struct sockaddr_in srvaddr;//Internet套接字結(jié)構(gòu)

            if ( (1) argc!=2 )
            { perror( "調(diào)用參數(shù)為零,請輸入服務(wù)器的主機(jī)名!\n" ); exit(1);}
            if ( (2) (he=gethostbyname(argv[1]))==NULL) //如果通過主機(jī)名沒有獲得對應(yīng)的主機(jī) 信息就提示用戶
            { perror("無法通過主機(jī)名獲得主機(jī)信息!\n" ); exit(1);}
            if ( (3)(sockfd=socket(AF_INET,SOCK_STREAM.0))==-1 ) //在無法創(chuàng)建套接字時,
            提示用戶
            { perror("無法創(chuàng)建套按字!\n" ); exit(1);}


            bzero( &srvaddr,sizeof(srvaddr));//置空 srvaddr
            srvaddr.sin_family = AF_INET;
            srvaddr.sin_port=(4)htons(PORT) ;
            srvaddr.sin_addr=(5)*((struct in_addr *)he->h_addr) ;
            //設(shè)置套接字結(jié)構(gòu)的各項信息,其中的地址來自于域名查詢后的 hp 變量
            if(connect( sockfd, (6)(struct sockaddr *)&srvaddr,sizeof( struct sockaddr))==-1 )
            { perror("連接失!\n" ); exit(1);}
            //連接服務(wù)器,如果失敗則提示用戶
            if (( nbytes = read ( sockfd,buf,MAXDATASIZE)) == -1 )
            { perror( "讀失!\n" ); exit(1);}
            //從套容接字中讀出數(shù)據(jù)
            buf[nbytes] = '\0';
            printf("讀到的內(nèi)容:%s",buf) ;
            close( sockfd) ;
            //打印數(shù)據(jù)并關(guān)閉套接字

            轉(zhuǎn)帖于:軟件水平考試_考試吧
            文章搜索  
            看了本文的網(wǎng)友還看了:
            網(wǎng)友評論
            昵 稱: *  評 分: 1分 2分 3分 4分 5分
            標(biāo)題:   匿名發(fā)表    (共有條評論)查看全部評論>>
            版權(quán)聲明 -------------------------------------------------------------------------------------
              如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。
            關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接  考試論壇  網(wǎng)站地圖
            Copyright © 2004-2008 考試吧軟件水平考試網(wǎng) All Rights Reserved    
            中國科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699
            百度大聯(lián)盟黃金認(rèn)證  十佳網(wǎng)絡(luò)教育機(jī)構(gòu)  經(jīng)營許可證號:京ICP060677