在线现看午夜福利片|女人16久久免费视频|鲁丝片一区鲁丝片二区鲁丝|一区二区三区欧美在线

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

                套接字結構

            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)絡字節(jié)順序,需要通過函數(shù) htons 轉換 

                主機結構

            struct hostent
            { char *h_name ; //主機的正式名稱
            char * *h_aliases ; //別名列表
            int h_addrtype ; //主機地址類型:AF_XXX
            lnt H_length; //主機地址長度:4 字節(jié)(32 位)
            char * *h_addr_list;//主機 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為默認模式 。

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

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

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

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

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

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

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

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

                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關閉一個套接字描述符,成功返回0,失敗為-1。

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

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

                附帶函數(shù)

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

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

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

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

                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; //主機信息類型
            struct sockaddr_in srvaddr;//Internet套接字結構

            if ( (1) argc!=2 )
            { perror( "調(diào)用參數(shù)為零,請輸入服務器的主機名!\n" ); exit(1);}
            if ( (2) (he=gethostbyname(argv[1]))==NULL) //如果通過主機名沒有獲得對應的主機 信息就提示用戶
            { perror("無法通過主機名獲得主機信息!\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) ;
            //設置套接字結構的各項信息,其中的地址來自于域名查詢后的 hp 變量
            if(connect( sockfd, (6)(struct sockaddr *)&srvaddr,sizeof( struct sockaddr))==-1 )
            { perror("連接失!\n" ); exit(1);}
            //連接服務器,如果失敗則提示用戶
            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ù)并關閉套接字

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