最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中I/O模型之select模型實(shí)例

 更新時(shí)間:2014年10月20日 14:33:55   投稿:shichen2014  
這篇文章主要介紹了C++中I/O模型的select模型,實(shí)例講述了I/O模型的用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了C++中I/O模型的select模型用法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

復(fù)制代碼 代碼如下:
void main() 

    CInitSock initSock; 
    USHORT nPort = 9999; //監(jiān)聽(tīng)的端口 
    SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
    if (sListen == INVALID_SOCKET) 
    { 
        printf("socket error..."); 
        return; 
    } 
    sockaddr_in servAddr = {0}; 
    servAddr.sin_family = AF_INET; 
    servAddr.sin_port = ::htons(nPort); 
    servAddr.sin_addr.S_un.S_addr = INADDR_ANY;  
    if (SOCKET_ERROR == ::bind(sListen, (sockaddr*)&servAddr, sizeof(servAddr))) 
    { 
        int nError = ::GetLastError(); 
        printf("connect error.."); 
        return; 
    } 
    ::listen(sListen, 5); 
 
     
    //select模型處理過(guò)程 
    //1.初始化套接字集合,添加監(jiān)聽(tīng)socket到這個(gè)集合 
    fd_set  fdSocket; 
    FD_ZERO(&fdSocket); 
    FD_SET(sListen, &fdSocket); 
    while (TRUE) 
    { 
        //2. 將集合的一個(gè)拷貝傳遞給select函數(shù) 
        //當(dāng)有事件發(fā)生時(shí),select移除未決的socket,然后返回   就是說(shuō)select返回時(shí) 集合的中socket就是發(fā)生事件的socket 
        fd_set fdRead = fdSocket; 
        int nRet = ::select(0, &fdRead, NULL, NULL, NULL); 
        if (nRet > 0) 
        { 
            //通過(guò)比較原來(lái)的fdSocket集合與經(jīng)過(guò)處理的fdRead集合 
            for (UINT i=0;i<fdSocket.fd_count;i++) 
            { 
                if (FD_ISSET(fdSocket.fd_array[i], &fdRead)) //就是這個(gè)觸發(fā)了 
                { 
                    if (fdSocket.fd_array[i] == sListen) //監(jiān)聽(tīng)套接字接收到新連接  為神馬分兩種情況:因?yàn)橛|發(fā)Read集合的情況有兩種:有連接來(lái)了或數(shù)據(jù)可讀了.... 
                    { 
                        // 
                        if (fdSocket.fd_count < FD_SETSIZE) //FD_SETSIZE=64 
                        { 
                            sockaddr_in addrRemote = {0}; 
                            int nAddrLen = sizeof(addrRemote); 
                            SOCKET sNew = ::accept(sListen, (sockaddr*)&addrRemote, &nAddrLen); 
                            FD_SET(sNew, &fdSocket); 
                        } 
                        else     
                        { 
                            printf("too many connection...error"); 
                            continue; 
                        } 
                    } 
                    else  //有可讀的 
                    { 
                        char szContent[256]={0}; 
                        int nRecv = ::recv(fdSocket.fd_array[i], szContent, sizeof(szContent), 0); 
                        if (nRecv > 0) 
                        { 
                            szContent[nRecv] = '\0'; 
                            printf("recv data:%s", szContent); 
                        } 
                        else //沒(méi)讀到數(shù)據(jù) 
                        { 
                            ::closesocket(fdSocket.fd_array[i]); 
                            FD_CLR(fdSocket.fd_array[i], &fdSocket); 
                        } 
                    } 
                } 
            } 
        } 
        else 
        { 
            printf("nRet litter 0, error..."); 
            return; 
        } 
    } 
    ::closesocket(sListen); //與socket配對(duì)寫(xiě) 
    printf("*******************************"); 
    getchar(); 
}

效果如下圖所示:

希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C++ 中私有繼承的作用

    C++ 中私有繼承的作用

    這篇文章主要介紹了C++ 中私有繼承的作用的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)與算法之字符串詳解

    C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)與算法之字符串詳解

    這篇文章將帶大家深入了解C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法中的字符串,文中主要是介紹了字符串的定義、字符串的比較以及一些串的抽象數(shù)據(jù)類(lèi)型,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • C++獲取本地時(shí)間常見(jiàn)方法匯總

    C++獲取本地時(shí)間常見(jiàn)方法匯總

    這篇文章主要介紹了C++獲取本地時(shí)間的常見(jiàn)方法,幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2020-08-08
  • 解析C語(yǔ)言中結(jié)構(gòu)體struct的對(duì)齊問(wèn)題

    解析C語(yǔ)言中結(jié)構(gòu)體struct的對(duì)齊問(wèn)題

    這篇文章主要介紹了C語(yǔ)言中結(jié)構(gòu)體struct的對(duì)齊問(wèn)題,作者深入到內(nèi)存分配方面來(lái)進(jìn)行解析,需要的朋友可以參考下
    2016-04-04
  • C++獲取文件大小的4種常見(jiàn)技巧分享

    C++獲取文件大小的4種常見(jiàn)技巧分享

    這篇文章主要介紹了C++獲取文件大小的4種常見(jiàn)技巧分享,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • c++實(shí)現(xiàn)加載so動(dòng)態(tài)庫(kù)中的資源

    c++實(shí)現(xiàn)加載so動(dòng)態(tài)庫(kù)中的資源

    下面小編就為大家?guī)?lái)一篇c++實(shí)現(xiàn)加載so動(dòng)態(tài)庫(kù)中的資源。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • 怎么通過(guò)C語(yǔ)言自動(dòng)生成MAC地址

    怎么通過(guò)C語(yǔ)言自動(dòng)生成MAC地址

    以下是對(duì)使用C語(yǔ)言自動(dòng)生成MAC地址的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C++基礎(chǔ)入門(mén)教程(四):枚舉和指針

    C++基礎(chǔ)入門(mén)教程(四):枚舉和指針

    這篇文章主要介紹了C++基礎(chǔ)入門(mén)教程(四):枚舉和指針,本文重點(diǎn)講解了指針,有幽默搞笑的語(yǔ)言描述了指針,需要的朋友可以參考下
    2014-11-11
  • C++的函數(shù)與指針

    C++的函數(shù)與指針

    今天小編就為大家分享一篇關(guān)于C++函數(shù)與指針的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-10-10
  • c++函數(shù)指針和回調(diào)函數(shù)示例

    c++函數(shù)指針和回調(diào)函數(shù)示例

    這篇文章主要介紹了c++函數(shù)指針和回調(diào)函數(shù)示例,需要的朋友可以參考下
    2014-05-05

最新評(píng)論

宁南县| 高安市| 泰州市| 和田县| 库车县| 英超| 娄烦县| 克山县| 普陀区| 南汇区| 全椒县| 辰溪县| 普定县| 永仁县| 富蕴县| 运城市| 保亭| 葵青区| 三台县| 齐河县| 齐齐哈尔市| 双牌县| 凭祥市| 图们市| 曲周县| 平乐县| 滁州市| 霍城县| 扶沟县| 秀山| 汉寿县| 秦皇岛市| 和政县| 宣恩县| 桓仁| 墨玉县| 丽水市| 甘南县| 梅州市| 金山区| 宜宾市|