1:建立一个基于对话框的程序
2:添加如下便利
class CServeDlg : public CDialog
{
// Construction
..............................
public:
CSocket m_sockSend;
CSocket sockListen;
}3:OnInitDialog()添加如下代码
BOOL CServeDlg::OnInitDialog()
{
............................
sockListen.Create(5802,SOCK_STREAM,"127.0.0.1");
sockListen.Bind(5801,"127.0.0.1");
sockListen.Listen(5); sockListen.Accept(m_sockSend);//m_sockSend用于存放客户端的信息
sockListen.Close();           //不再监听 SetTimer(1,2000,NULL);
return TRUE;  // return TRUE  unless you set the focus to a control
}4:
void CServeDlg::OnTimer(UINT nIDEvent) 
{
static iIndex=0;
CString str;
str.Format("%d",iIndex++);
AfxMessageBox(str,MB_OK);
}运行结果:
是2秒为界限,不同的弹出对话框显示1,2,3
我的疑问:
CSocket的Accept函数为阻塞的,就是说客户端没有连接时,服务器端应该一直停在
sockListen.Accept[/b](m_sockSend);//m_sockSend用于存放客户端的信息
这一行;后面的SetTimer不应该被执行
可是运行结果显示:OnTimer在执行(客户端还没连接时)
为什么????奇怪