這一篇是在昨天寫的基礎上,查閱了一些資料,對於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模型的: 一個連接,一個線程。