我用的是CSocket类,服务器上我有两个侦听套结字,对应不同的端口,
连接到我的服务器的客户端就两个,一个端口一个我在接受客户端连接请求后,还要进行认证处理,如果两个客户端同时连接的话,服务器可能只能同时处理一个,另外个就处理不了,这样就导致没有得到认证的哪个客户端再次向服务器端发送连接请求时,服务器端哪个侦听套结字连连接请求事件都不触发,即使客户端重新运行程序,再发送连接请求也一样.我单步调试了下,确实没有触发连接请求事件,是不是以前有某个连接请求没有处理,就不再触发下个了啊,请问我如何解决呀,很急的,谢谢了

解决方案 »

  1.   

    我想请问下,是不是以前有某个连接请求没有处理,就不再触发下个了,CSocket类是不是这样的啊
      

  2.   

    不是以前有某个连接请求没有处理,就不再触发下个了,CSocket类是不是这样的啊 ,不是 这样的,在server peer 每次收到一个connect request 的话他都会触发 connect时间的,但是如果你的socket 使用的是长连接的话每次 data 来得时候是不触发 connect 事件的而是触发Onreceive 事件 ,如果使用短连接的话,那就要没事使用connect 来连接server 这样就可以每次都触发 connect 事件 ,其实不需要使用两个svr,就可以处理,在你的svr端支持multi-thread 就可以了每次更具remote address 来区分是那个客户端的连接请求即可
      

  3.   

    看了一下你的应用,最好直接用API+多线埕,
    用CSocket实现恐怕有难度!
      

  4.   

    用支持并发连接请求的多线程模型来处理。用一个侦听,听到后启动另一个线程去处理连接和数据传输问题,但多线程不支持MFC类对象共享,开启另一个线程后要用Attach()将侦听返回的连接Socket对象赋给辅助线程的Socket。这样无论你连接多少客户端都不会发生阻塞。
      

  5.   

    如果有连接请求的话会触发OnAccept事件的,但就是没有触发呀
      

  6.   

    void CListenGPRSSocket::OnAccept(int nErrorCode) 
    {
        CSocket::OnAccept(nErrorCode);
        m_pDoc->ProcessPendingAccept(3);//处理函数
    }
    连接请求开始我是这样处理的,    CSocket::OnAccept(nErrorCode);这句要吗
      

  7.   

    启动一个监听socket 就可以了,它可以同时处理多个请求,一般缺省为5个