首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

select连接有关问题~ 有点一直搞不明白

2012-02-08 
select连接问题~ 有点一直搞不明白~*************************引用**********************************使

select连接问题~ 有点一直搞不明白~
*************************   引用   **********************************

使用select后我们的服务器程序就变成了.    


      初始话(socket,bind,listen);        
        while(1)  
      {  
                设置监听读写文件描述符(FD_*);        
                调用select;  
                如果是倾听套接字就绪,说明一个新的连接请求建立   //?我们只能判断可读
                                                                                                          //如果可读怎么知道是
                                                                                    //一个新的连接还是客户来的数据呢
              {    
                                建立连接(accept);  
                                加入到监听文件描述符中去;  
              }  
              否则说明是一个已经连接过的描述符  
              {  
                                        进行操作(read或者write);  
                }                                      
      }                                
**********************************************************************

我现在是在做多个客户与服务器连接~      
在服务器端~   首先在主函数里不停的监听srvSock套接口~
如果有客户连接那么我再创建一个服务线程~专门为这个客户服务~
main()
{
          timevalue   tv   =   {0,0};
            while(1)
            {
                  cout   < <   "wait   client   to   connect.... "   < <   endl;
                  if(   select(srvSock+1,   NULL,   NULL,   &tv   )   >   0   )  
                  {
                            if(     FD_ISSET(srvSock,   &readSet)   )
                            {
                                    int   newSock   =   accept(...);


                                    cout   < <   "newSock   =   " < <   newSock   < <endl;
                                    pthread_create(       serviceThread,   newSock   );
                              }
                    }
                    else
                    {
                                          cout   < <   "no   client   to   connect! "   < <endl;
                      }
            }
}

问题:   有个客户端软件在不停的尝试连接我这个服务器~     当我启动服务器时~
              一下子与客户端建立了两个连接~       打印信息大致如下:
            wait   client   to   connect.....
            newSock   =   4
            .............
            ............
            wait   client   to   connect.....
            newSock   =   5
请问怎么解决一个客户多次连接这个问题~   先谢了~

[解决办法]
接收连接的套接字和读写数据的套接字不是同一个.
看来你还不明白网络连接的过程啊.
server
socket //创建一个套接字.
bind //绑定一个地址
listen //设为设为服务端.
accept //接收连接
if(等到连接)
新建立一个连接套接字,用这个套接字和这个连接读写数据 //一般这里都是fork一个新进程.
else 继续等待连接
回到上边,继续等待其他连接.

//----------------等待连接和读写数据不是用的同一个套接字,也不是用的同一个函数调用.


clent

socket //创建一个套接字.
bind //绑定一个地址
connect //连接到服务器
开始读写数据.

热点排行