我利用CAsyncSocket派生类编写客户机服务器模型,客户机服务器已经联机成功,也能发送数据让其它测试程序收到,但就是触发不了OnReceive事件,以至于收不到数据。请大家帮帮忙阿!
void CNetSocket::OnReceive(int nErrorCode) 
{
if(nErrorCode==0)
m_pDlg->OnReceive();
CAsyncSocket::OnReceive(nErrorCode);
}

解决方案 »

  1.   

    OnReceive Function 需要你来重载, 这样写上去是没有用的:)
    我想这就是问题了, 
    还有, 你的聊天室如何控制受到的信息啊, 
    都是MyDialog::OnReceive处理??
    几乎同时到达的先后两个数据, 你就不怕前面的没有处理完, 后面的就进入缓冲区了?
      

  2.   

    对于C/S通讯的两个程序,通常定义三个CSocket(或其基类)的派生类,比如
    服务端:
    CListenSocket和CConnectSocket
    客户端:
    CClientSocket
    通常代码是
    CListenSocket listen;
    ...
    listen.Create()
    listen.Listen()
    ...
    //CListenSocket重载OnAccept
    CConnectSocket * connect=new CConnectSocket;
    listen.Accept(*connect);
    ...
    //CConnectSocket重载OnReceive()
    Receive()
    ...
    //和OnClose()
    Close()
    不知你是怎么做的(对象是否搞错了)
      

  3.   

    我服务器端的OnAccept()和OnReceive()是放在一个派生类里,OnAccept()能够触发。
    可是我客户端的派生类里只有OnReceive(),也收不到数据啊!
      

  4.   

    OnReceive()是回调函数, 不用你自己显式调用的, 不用管触发问题, 只要有数据到达, 操作系统自动调用此函数OnReceive()函数中,用来处理接收数据前的准备工作;你可以放置调用另一函数比如Receive()----这是自定义的, 用于真正处理收到的数据.而不是象楼主说的, 在里面显式调用
      

  5.   

    我是这样做的阿,如果有数据到达就出发OnReceive(),然后再调用对话框类的OnReceive()进行数据接收和处理!
      

  6.   

    重载OnReceive
    或自己调用winsock的Receive写一个函数
      

  7.   

    谢谢各位,问题已经解决了!
    我加了一句m_sConnectSocket.AsyncSelect(FD_READ|FD_WRITE|FD_OOB);就可以了!