最近写一个关于pop3接收邮件方面的程序,老是出现连接不成功,代码如下:
其中pop3是继承CAsyncSocket类,pop3.connect()出问题,GetLastError()得到的返回值是10035(WSAEWOULDBK),我想是不是没有采用阻塞模式(因为是CAsyncSocket继承类)所以在pop3.connect()前加了如下两条语句:
pop3.AsynSelect(0);
pop3.IoCtl(FDIONB,0);
还是在connect()步出现问题,去掉pop3.AsynSelect(0),也不行,代码如下:
pop3.Create();
pop3.AsynSelect(0);
pop3.IoCtl(FDIONB,0);
if(!pop3.Connect((LPCSTR)m_strServer,110))
   AfxMessageBox("Connect server fail"); //连接服务器
TCHAR errMsg[2048] = {0};
sprintf((char*)errMsg,"%d",GetLastError());
AfxMessageBox((LPCTSTR)errMsg);
望高人指点如何做,在线等,谢谢了!

解决方案 »

  1.   

    WSAEWOULDBK不算是出错了。其实,他只是表明这个连接过程(Connect)是一个非阻塞模式,需要等待的,一个异步事件。一般的做法是:
    pop3.Create();
    pop3.AsynSelect(0);
    pop3.IoCtl(FDIONB,0);
    pop3.Connect((LPCSTR)m_strServer,110);
    //这路要等待,然而不能使用Sleep,因为需要消息响应,一般来说,可以进行消息循环,直到OnConnect函数被调用;
    while (!m_bConnected)
    {
        MSG msg;
        if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
             if (!::AfxGetApp()->PreTranslateMessage(&msg))
             {
                  if (!::TranslateMessage(&msg))    ::DispatchMessage(&msg);
             }
        }
    }
    ...void CMySocket::OnConnect(int nErrorCode)
    {
        if (nErrorCode == 正确)
        {
            m_bConnected = true;
        }
    }