完成端口需要一下几个步骤,可是我有点不明白。
 1.初始化Winsock
 2.创建一个完成端口
 3.根据服务器线程数创建一定量的线程数
 4.准备好一个socket进行bind然后listen
 5.进入循环accept等待客户请求
 6.创建一个数据结构容纳socket和其他相关信息
 7.将连进来的socket同完成端口相关联
 8.投递一个准备接受的请求
在接受了一个客户请求连接后,同连进来的socket同完成端口相关联,然后准备接收和发送,那我是不是同socket关联以后,那么这个套节子是不是一直就和完成端口关联呢,如果有另外的一个请求连接来到,那我以前的关联socket工作受影响吗?

解决方案 »

  1.   

    在接受了一个客户请求连接后,同连进来的socket同完成端口相关联,然后准备接收和发送,那我是不是同socket关联以后,那么这个套节子是不是一直就和完成端口关联呢,如果有另外的一个请求连接来到,那我以前的关联socket工作受影响吗?
    -----------------------------
    一般我们把套接字同重叠结构结合在一起,所以不会影响。
      

  2.   

    如果来了新连接,可以通过负责listen的socket在accept函数中,把新的连接与新建的socket对象关联起来就可以了。如
    CBlockingSocket *pNewSocket = NULL;socketoftcp.Create();
    socketoftcp.Bind(sd);
    socketoftcp.Listen(DATATRANS_WAITCOUNT_MAX);//20  
    for(;;) 
    {
    CSockAddr  sdofconnect;
    pNewSocket = new CBlockingSocket;
    if(!socketoftcp.Accept(*pNewSocket,sdofconnect) 
    {
                Sleep(50); if(socketoftcp.m_hSocket)
              {
    socketoftcp.Close();
    }
    ...
    }
      

  3.   

    问题是我接受了连接以后呢,我的这个连接呢不想让他中断,一直保持连接,我就用这个连接的socket发送和接收数据。可是好象不太行,在核心处理线程里面,我看,完成端口在没有数据的时候要把这个socket关闭。那我应该如何解决呢?
      

  4.   

    我也一样,越看越迷茫,道理都清楚,可是就是怎样发送我也搞不懂,是不是也用完成端口,那该如何发送呢?另外,这么多的socket连接,我该如何管理呢?