欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中I/O模型之select模型實例

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

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

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

    CInitSock initSock; 
    USHORT nPort = 9999; //監(jiān)聽的端口 
    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模型處理過程 
    //1.初始化套接字集合,添加監(jiān)聽socket到這個集合 
    fd_set  fdSocket; 
    FD_ZERO(&fdSocket); 
    FD_SET(sListen, &fdSocket); 
    while (TRUE) 
    { 
        //2. 將集合的一個拷貝傳遞給select函數(shù) 
        //當(dāng)有事件發(fā)生時,select移除未決的socket,然后返回   就是說select返回時 集合的中socket就是發(fā)生事件的socket 
        fd_set fdRead = fdSocket; 
        int nRet = ::select(0, &fdRead, NULL, NULL, NULL); 
        if (nRet > 0) 
        { 
            //通過比較原來的fdSocket集合與經(jīng)過處理的fdRead集合 
            for (UINT i=0;i<fdSocket.fd_count;i++) 
            { 
                if (FD_ISSET(fdSocket.fd_array[i], &fdRead)) //就是這個觸發(fā)了 
                { 
                    if (fdSocket.fd_array[i] == sListen) //監(jiān)聽套接字接收到新連接  為神馬分兩種情況:因為觸發(fā)Read集合的情況有兩種:有連接來了或數(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 //沒讀到數(shù)據(jù) 
                        { 
                            ::closesocket(fdSocket.fd_array[i]); 
                            FD_CLR(fdSocket.fd_array[i], &fdSocket); 
                        } 
                    } 
                } 
            } 
        } 
        else 
        { 
            printf("nRet litter 0, error..."); 
            return; 
        } 
    } 
    ::closesocket(sListen); //與socket配對寫 
    printf("*******************************"); 
    getchar(); 
}

效果如下圖所示:

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

相關(guān)文章

  • c++顯式類型轉(zhuǎn)換示例詳解

    c++顯式類型轉(zhuǎn)換示例詳解

    這篇文章主要介紹了c++顯式類型轉(zhuǎn)換示例詳解,需要的朋友可以參考下
    2014-04-04
  • 簡單總結(jié)C語言中各種類型的指針的概念

    簡單總結(jié)C語言中各種類型的指針的概念

    這篇文章主要簡單總結(jié)了C語言中各種類型的指針的概念,指針可以說是C語言本身所具有的最大特性,平時根據(jù)不同使用場合習(xí)慣地將其簡單分類,需要的朋友可以參考下
    2016-03-03
  • 詳解C/C++ QT QChart 繪制組件應(yīng)用

    詳解C/C++ QT QChart 繪制組件應(yīng)用

    Qtcharts 組件基于GraphicsView模式實現(xiàn),其核心是QChartView和QChart的二次封裝版。本文重點給大家介紹C/C++ QT QChart 繪制組件應(yīng)用的相關(guān)知識,感興趣的朋友一起看看吧
    2021-11-11
  • C\C++實現(xiàn)讀寫二進(jìn)制文件的方法詳解

    C\C++實現(xiàn)讀寫二進(jìn)制文件的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C\C++實現(xiàn)讀寫二進(jìn)制文件的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • Qt5連接并操作PostgreSQL數(shù)據(jù)庫的實現(xiàn)示例

    Qt5連接并操作PostgreSQL數(shù)據(jù)庫的實現(xiàn)示例

    本文主要介紹了Qt5連接并操作PostgreSQL數(shù)據(jù)庫的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C++ sort排序函數(shù)用法詳解

    C++ sort排序函數(shù)用法詳解

    本文主要介紹了C++ sort排序函數(shù)用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C語言文件操作的入門詳解教程

    C語言文件操作的入門詳解教程

    這篇文章主要給大家介紹了關(guān)于C語言文件操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 最新clion2020激活碼附安裝教程(親測有效)

    最新clion2020激活碼附安裝教程(親測有效)

    這篇文章主要介紹了最新clion2020激活碼附安裝教程(親測有效),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 深入了解C語言中的字符串和內(nèi)存函數(shù)

    深入了解C語言中的字符串和內(nèi)存函數(shù)

    本文主要帶大家來學(xué)習(xí)一些常用的庫函數(shù)。有了這些庫函數(shù),我們可以更加方便地操作字符串和內(nèi)存,從而提升我們的編碼效率。話不多說,我們開始吧
    2022-11-11
  • Qt編寫地圖之實現(xiàn)經(jīng)緯度坐標(biāo)糾偏

    Qt編寫地圖之實現(xiàn)經(jīng)緯度坐標(biāo)糾偏

    地圖應(yīng)用中都涉及到一個問題就是坐標(biāo)糾偏的問題,這個問題的是因為根據(jù)地方規(guī)則保密性要求不允許地圖廠商使用標(biāo)準(zhǔn)的GPS坐標(biāo),而是要用國家定義的偏移標(biāo)準(zhǔn)。本文將詳細(xì)講解如何在Qt中實現(xiàn)經(jīng)緯度坐標(biāo)糾偏,需要的可以參考一下
    2022-03-03

最新評論