小弟正在学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()函数为什么能处理消息???????跪请大家帮帮我吧!我为这个问题都花去大半个寒假了!!!!
谢谢了,谢谢!
祝大家新年好运气!
{
// 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()函数为什么能处理消息???????跪请大家帮帮我吧!我为这个问题都花去大半个寒假了!!!!
谢谢了,谢谢!
祝大家新年好运气!
{
// TODO: Add your control notification handler code here
CServerSocket listensocket;
listensocket.Create(4002);
listensocket.Listen();
}
上面的函数调用结束后会销毁listensocket,还怎么侦听?
可以将listensocket定义为CSDlg的成员变量试一下
AfxMessageBox("FUCK");
else
AfxMessageBox("OK");
其他我觉得没什么问题
你可以到www.vckbase.com上下栽一个完整的服务器和课户端程序
进行测试
{
// TODO: Add your control notification handler code here
CServerSocket listensocket;
listensocket.Create(4002);
listensocket.Listen(); // 假设连接上……
// 到这里listensocket就销毁了,它会调用析构函数
// 这样可能关闭连接
// 既然没连接,那当然就不可能Accept
}
CServerSocket m_listensocket; // 令其为CSDlg成员变量void CSDlg::OnButton1()
{
m_listensocket.Create(4002);
m_listensocket.Listen();
}
是不是WIN2K的原因??