c++ 通信演進level2 ----多線程同步阻塞通信(BIO)

  這一篇是在昨天寫的基礎上,查閱了一些資料,對於BIO模型做了更深一步的理解後,實現的代碼:地址。 主要修改的代碼在於:

typedef struct {
    HANDLE thread;
    SOCKET sock;
}AcceptNode;

//保存連接的容器
list<AcceptNode*> acceptList;
......
int main(){
    //加載Winsock庫,初始化socket資源
    initialization();
    //創建套接字
    SOCKET s_server;
    s_server = socket(AF_INET,SOCK_STREAM,0);
    //綁定信息
    bindInfo(&s_server);
    //將socket設置爲lisen狀態
    changtoListen(&s_server);
    //增加對多線程的支持
    while (1){
        SOCKET commandSock;
        responseAccept(commandSock,&s_server);
        //構造節點
        AcceptNode* _node = new AcceptNode;
        _node->sock=commandSock;
        HANDLE _thread = CreateThread(NULL,0,onInteract,(LPVOID)&_node->sock,0,NULL);
        _node->thread = _thread;
        //將當前接入的節點加入容器
        acceptList.push_back(_node);
        //進入下一輪請求
    }
    return 0;
}

  其餘的代碼都沒有什麼變化。  其運行結果:

  此時,我將再啓動一個客戶端:

  它對應着BIO模型的: 一個連接,一個線程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章