我想在程序中使用AsyncSelect(),这样可以让系统主动通知有客户连接并调用。下面是代码:
void CServerDlg::OnButton1()
{
int i=0;
CString tempPort="0";
unsigned int nPort=0;
CString strAddr="";
GetDlgItemText(IDC_EDITIP,strAddr);
GetDlgItemText(IDC_nPort,tempPort);
struct tm *times; //定义时间指针变量.....(只能用指针)
time_t t; //定义系统时间变量,供提供系统时间
t = time(0); //当前系统时间给变量t
times = localtime(&t);
m_h=times->tm_hour;
m_m=times->tm_min;
m_s=times->tm_sec;
UpdateData(false);
nPort=atoi(tempPort.GetBuffer(tempPort.GetLength()));
if ( strAddr=="")
{
MessageBox("请输入本机IP地址!");
return;
}
else if (nPort=0)
{
MessageBox("请输入端口号(不能为0)!");
return;
}
else
m_l="监听中,等待客户端连接......";
UpdateData(false);
nPort=atoi(tempPort.GetBuffer(tempPort.GetLength()));
//-----------------------------------------------------------------------------
while (i!=1){
if ( !AfxSocketInit() )
{
MessageBox("Windows Sockets初始化错误","Send",MB_ICONSTOP);
return;
}
//构造两个Socket对象
CSocket ListeningSocket, AcceptSocket;
//创建Socket
if ( !ListeningSocket.Create(nPort) )
{
MessageBox("监听失败!","Listening",MB_ICONSTOP);
}
else
{
//将本地地址与该Socket对象捆绑
ListeningSocket.Bind(nPort,strAddr);
//开始监听
ListeningSocket.Listen();
//---------------------------------------------------------------------
ListeningSocket.AsyncSelect();//AsyncSelect里面的参数应
//该如何填写?
//---------------------------------------------------------------------
AcceptSocket.AsyncSelect()
//创建一个新的Socket对象,接受客户的请求
ListeningSocket.Accept(AcceptSocket);
}
如上代码,我的想法是这样的,在调用Listen()函数后,调用AsyncSelect()来监视是否有客户端连接并适时调用Accept()。
现在主要有两个问题:
1.不知道AsyncSelect()括号内的参数应该怎么填写
2.在使用AsyncSelect()后,怎样通知Accept()有连接呢?是像我上面一样直接AcceptSocket.AsyncSelect(),还是要用别的方法?
请高手赐教!