本帖最后由 VisualEleven 于 2010-09-20 14:25:03 编辑

解决方案 »

  1.   

    补充一下: 调用的Connect 函数:   view中void 
    CBwChessView::Connect(void)
    {       
        m_IsConnect = true;
        MessageBox( _T("连接成功,可以开始游戏."));
    }感觉这里 也是什么也没有做  ,怎么就连接上了 ?
      

  2.   

    把调用OnAccept OnConnect OnClose OnReceive的代码都帖出来看看
      

  3.   

    我是说贴调用这些函数的代码,不是实现这些函数的代码。比如你的OnAccept,总有个
    case FD_ACCEPT: OnAccept() 的地方吧
      

  4.   

    这样的  只有端口设的一样  ,主机就可以接受  ;但是客机无论选哪个端口 ,都直接调用OnConnect()  ;貌似不应该这样  ,而是选准了和 主机设置的端口一样 才连得上
      

  5.   

    明白你的意思了。
    你得在你的代码里面不断的调用CAsyncSocket::Receive,最好用一个线程不断的调用,这样当有数据的时候才会回调OnReceive,否则是不会回调OnReceive的。
      

  6.   

    有可能正是楼主自己说的哪样,你自己在OnReceive中什么也没有做.......
      

  7.   

    你需要去触发事件 在你receive之前应该FD_READ一些 也就是触发接收事件 然后才会接收 
    建议你看看这篇文章:http://blog.csdn.net/wingsing2010/archive/2010/07/27/5767541.aspx
      

  8.   


       CBwChessView * pView = (CBwChessView*)AfxGetMainWnd();
        pView->Receive();
        CAsyncSocket::OnReceive(nErrorCode);
     这是要做的事情  : 只不过 都没用调用它 ,当然就不做事了
      

  9.   


    请看MSDN里面的解释:
    OnReceive
     Notifies a listening socket that there is data to be retrieved by calling Receive
    也就是说只有调用了Receive后当有数据时才会回调OnReceive。
    如果你用主线程不断调用Receive的话,主线程就会卡住。如果你的主线程还要做别的事情的话,最好就再开一个线程。
    你可以先试试不断调用Receive,不行的话再用select试试。但都会阻塞当前线程。
    请多参考MSDN
      

  10.   

    if(meishost){
    m_connect.Receive(NULL,0);
    }
    else{
    m_sock.Receive(NULL,0);
    }鼠标左键响应中这样调用的  ;
       
            问题很诡异 :
      
            在任意一个程序中点鼠标左键 ,另一个程序会自动死掉 .  难道是线程的问题  . 但为什么是另一个程序死掉   .