首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

一个很基础的socket有关问题,怎么保持最多5个用户的连接接

2012-01-03 
一个很基础的socket问题,如何保持最多5个用户的连接接不用MFC的类,直接用socket,面向有连接的套接字,我如

一个很基础的socket问题,如何保持最多5个用户的连接接
不用MFC的类,直接用socket,面向有连接的套接字,我如何保持5个用户的最大连接.一般accept是写在一个while循环里面的,accpet好像有空闲等待处理,使这个循环不止于像个死循环,而占用太多处理器时间,我想保持最大的5个连接,该怎么做?我最初是这么干的

        SOCKET   svrSk   =   socket(......);
        SOCKET   scSk[5];
        for(   i   =   0;   i   <   5;   i++)   scSk[i]   =   INVALID_SOCKET;
        bind(svrSk,...);
        listen(svrSk,....);
       
        while(true)
        {
              if(scSk[i]   ==   INVALID_SOCKET   &&   count   <   5)
                  {
                      scSk[i]   ==   accept(   svrSk,   ...);
                      count   =   count   +   1;
                    }
              ###
          }
        但是一旦有了5个连接后,那么这个循环就像个死循环了,我现在是又在###处加了个新的SOCKET,用来出来那些超过以后的连接用户.我加了这么句
        SOCKET   tmpSock   =   accept(svrSk,....);
我想知道一般设置最大的连接数目的经典做法是什么样的,希望高人能指点.




[解决办法]
就在listen里设置。
这样在accept时,如果已经accept5个了,则新的连接请求被拒绝,直到某个客户端结束了连接。
[解决办法]
accept会阻塞,不会占用CPU.
[解决办法]
OnAccept()
if(count <5)
count++
bindsocket
else
closesocket

OnClose()
count--
[解决办法]
先accept,判断socket数量,超过就closesocket
[解决办法]

简单点你用一个变量记录accept的数目,超过了就closesochet,然后continue到accept,否则变量递增,用户断开就将变量递减

热点排行