小弟正在学VC网络编程,下面是我编写的一个基于TCP连接方式的网络程序的一些说明:在服务器端程序中:我从CAsyncSocket类派生出一个CServerSocket类,然后根据类向导在CServerSocket类中添加了虚函数OnAccept()。书上说当客户端有连接请求时,将触发该事件,由于我想当客户端有连接请求时先通知服务器端一下,所以我就在OnAccept()中添加了一句提示,见下面程序段:void CServerSocket::OnAccept(int nErrorCode) 
{
// TODO: Add your specialized code here and/or call the base 
    AfxMessageBox("somebody come!");//通知服务器端有连接请求
}另外,我在服务器端程序的对话框中添加了一个按钮,当我按下该按钮时,就”启动“了服务器,该服务器的IP为211.158.37.237,端口为4002,请见下面程序段:void CSDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
CServerSocket listensocket;
listensocket.Create(4002);
listensocket.Listen();
}
在客户端程序中:我从CAsyncSocket类派生出一个CClientSocket类。在客户端程序的对话框中添加一个按扭,当我按下按扭时就连接服务器,请见下面程序段:
void CClientDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
       CClientSocket m_ConnectSocket;
       m_ConnectSocket.Create();       if(!m_ConnectSocket.Connect(("211.158.37.237"),4002))
          AfxMessageBox("FUCK");
       else
          AfxMessageBox("OK");

}然后,我就在两台PC上调试,当然,由于我没有在服务器端调用Accept()来接受客户端的连接请求,所以客户端会弹出FUCK的对话框,但是,让我纳闷的是为什么服务器端没有弹出somebody come!的对话框,也就是说为什么服务器端的OnAccept()函数没有被调用???????????????
我翻了很多书,书上说”该函数是被框架调用的“,请问这句话该怎么理解?????
当我在类向导添加OnAccept()函数时,它前面的标志是V,也就是说是虚函数,而W标志才是消息处理函数,那请问OnAccept()函数为什么能处理消息???????跪请大家帮帮我吧!我为这个问题都花去大半个寒假了!!!!
谢谢了,谢谢!
祝大家新年好运气!

解决方案 »

  1.   

    void CSDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CServerSocket listensocket;
    listensocket.Create(4002);
    listensocket.Listen();
    }
    上面的函数调用结束后会销毁listensocket,还怎么侦听?
    可以将listensocket定义为CSDlg的成员变量试一下
      

  2.   

    if(!m_ConnectSocket.Connect("211.158.37.237",4002))
              AfxMessageBox("FUCK");
           else
              AfxMessageBox("OK");
    其他我觉得没什么问题
    你可以到www.vckbase.com上下栽一个完整的服务器和课户端程序
    进行测试
      

  3.   

    // 跪请大家帮帮我吧!我为这个问题都花去大半个寒假了!!!!真同情你,我当初一样痛苦~解决方法如FBStudio(飞鸟)所说
      

  4.   

    to FBStudio(飞鸟) :我把listensocket定义为CSDlg的成员变量后还是没有对话框弹出!to GameWeaverDummy(小白菜) :我添加OnAccept()函数是通过类向导添加的,该函数前面的标志是“V”,而不是“W”。我又什么办法让它变成消息处理函数呢?
      

  5.   

    V是Virtual的意思,本来就该是这样的,不用改服务端程序这么简单几行代码,肯定是没有问题的。我估计多半是你的客户端程序不对,建议你用telnet直接连接一下试试!
      

  6.   

    to 楼上的:这两台PC的IP地址分别为:192.168.0.1和192.168.0.2,所以是一个网段的,而且这两台PC互相都能ping得通。请问这是怎么回事?
      

  7.   

    void CSDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CServerSocket listensocket;
    listensocket.Create(4002);
    listensocket.Listen();   // 假设连接上……
             // 到这里listensocket就销毁了,它会调用析构函数
             // 这样可能关闭连接
             // 既然没连接,那当然就不可能Accept
    }
      

  8.   

    解决方法,
    CServerSocket m_listensocket;  // 令其为CSDlg成员变量void CSDlg::OnButton1() 
    {
    m_listensocket.Create(4002);
    m_listensocket.Listen();
    }
      

  9.   

    我试过几遍了,还是不行!!!!!!1
    是不是WIN2K的原因??