CMySock继承于CAsyncSocketCMySock telnet;
UINT nTimes=0;//重试次数
while(!dwConnect)
{
if(telnet.GetLastError()==WSAEWOULDBLOCK)
{
AfxMessageBox("ok");//如果去掉这句话,就无法触发OnConnect事件,为什么?百思不得其解。
break;
dwConnect=1;
}
else
{
iError=telnet.GetLastError();
strErrorMsg.Format("Error Code: %d",iError);
MessageBox(strErrorMsg,"Error",MB_ICONSTOP);

if(nTimes<=10)
{
dwConnect=telnet.Connect(strIP,nPort);
nTimes+=1;
}
if(nTimes==10)
break;

}

解决方案 »

  1.   

    CAsyncsocket 类 编 程 模 型 ---- 在 一 个MFC 应 用 程 序 中, 要 想 轻 松 处 理 多 个 网 络 协 议, 而 又 不 牺 牲 灵 活 性 时, 可 以 考 虑 使 用CAsyncSocket 类, 它 的 效 率 比CSocket 类 要 高。CAsyncSocket 类 针 对 字 节 流 型 套 接 字 的 编 程 模 型 简 述 如 下: ---- (1) 构 造 一 个CAsyncSocket 对 象, 并 用 这 个 对 象 的Create 成 员 函 数 产 生 一 个Socket 句 柄。 可 以 按 如 下 两 种 方 法 构 造: CAsyncSocket sock;
    Sock.Create(); 
    // 使 用 默 认 参 数 产 生 一 个 字 节 流 套 接 字
     或
    CAsyncSocket*pSocket=new CAsyncSocket;
    int nPort=27;
    pSocket->Create(nPort, SOCK-DGRAM);
    // 指 定 端 口 号 产 生 一 个 数 据 报 套 接 字---- 第 一 种 方 法 在 栈 上 产 生 一 个CAsyncSocket 对 象, 而 第 二 种 方 法 在 堆 上 产 生CAsyncSocket 对 象。 第 一 种Create 成 员 函 数 用 缺 省 参 数 产 生 一 个 字 节 流 套 接 字, 第 二 种Create 成 员 函 数 用 指 定 的 端 口 和 地 址 产 生 一 个 数 字 报 套 接 字。Create 的 参 数 有: 
    ---- ① 端 口,UINT 类 型。 注 意: 如 果 是 服 务 方, 则 使 用 一 个 众 所 周 知 的 端 口 供 服 务 方 连 接; 如 果 是 客 户 方, 典 型 做 法 是 接 受 默 认 参 数, 使 套 接 字 可 以 自 主 选 择 一 个 可 用 端 口; ---- ②socket 类 型。SOCK-STREAM( 默 认 值) 或SOCK-DGRAM; ---- ③socket 地 址。 例 如“ftp.gliet.edu.cn” 或“202.193.64.33”。 ---- (2) 如 是 客 户 方 程 序, 用CAsyncSocket ∷Connect 成 员 函 数 连 接 到 服 务 方; 如 是 服 务 方 程 序, 用CAsyncSocket ∷Listen 成 员 函 数 开 始 监 听, 一 旦 收 到 连 接 请 求, 则 调 用CAsyncSocket ∷Accept 成 员 函 数 开 始 接 收。 注 意:CAsyncSocket ∷Accept 成 员 函 数 要 用 一 个 新 的 并 且 是 空 的CSocket 对 象 作 为 它 的 参 数, 这 里 所 说 的“ 空 的” 指 的 是 这 个 新 对 象 还 没 有 调 用Create 成 员 函 数。 ---- (3) 调 用 其 他 的CAsyncSocket 类 成 员 函 数 进 行 通 讯 管 理。 ---- (4) 通 讯 结 束 后, 销 毁CAsyncSocket 对 象。 如 果 是 在 栈 上 产 生 的CAsyncSocket 对 象, 则 对 象 超 出 定 义 的 范 围 时 自 动 被 析 构; 如 果 是 在 堆 上 产 生, 也 就 是 用 了new 这 个 操 作 符, 则 必 须 使 用delete 操 作 符 销 毁CAsyncSocket 对 象