这一篇是在昨天写的基础上,查阅了一些资料,对于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模型的: 一个连接,一个线程。