2852|1

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

evc下巨难的GPRS网络的问题! [复制链接]

开发一个网络程序,需要兼容cmnet和cmwap,因为事先不知道网络类型,所以采用先去联接10.0.0.172 80端口,如果成功就判断是cmwap,然后再联www.baidu.com,如果成功则是cmnet,但问题是:
1、不管用CSocket还是CCeSocket,程序都偶尔会死在::Connect(host,port)上。
2、用CSock类继承CCeSocket,重载ConnectHelper后,将socket句柄变为非阻塞,然后再循环检查,连接状态,也总是会连接
不上。但通过wireshark对模拟器抓包发现有google的响应包。
另外在ppc2003模拟器上用IE可以打开www.baidu.com
附上代码,请高手们看看:
BOOL CUtility::IsWAPNet()
{
          CSock wsWAPServer;
                  g_mylog.WriteLog(_T("IsWAPNet::Create"),LNORMAL);
                  wsWAPServer.SetTimeOut(5);
                  if(!wsWAPServer.Create())
                  {
               
                            return FALSE;
                  }
                  CString wapserver=CMWAP_SERVER ;
                  g_mylog.WriteLog(_T("IsWAPNet::Connect"),LNORMAL);
                  if(!wsWAPServer.Connect(wapserver,80))
                  {               
                           g_mylog.WriteLog(_T("IsWAPNet::Connect fail"),LNORMAL);
                            return FALSE;
                  }
        g_mylog.WriteLog(_T("IsWAPNet::Send"),LNORMAL);
        if(wsWAPServer.Send("\0",1,0)<=0)
        {

                g_mylog.WriteLog(_T("IsWAPNet::Send fail"),LNORMAL);
                return FALSE;
        }
        return TRUE;
}

BOOL CUtility::IsNetGood()
{
        if(IsWAPNet())
        {
                return TRUE;
        }
        g_mylog.WriteLog(_T("IsCMNet!"),LNORMAL);
        CSock wsSMTPServer;
        if(!wsSMTPServer.Create())
        {
               
                return FALSE;
        }
        wsSMTPServer.SetTimeOut(25);
        CString wapserver="www.baidu.com" ;
        if(!wsSMTPServer.Connect(wapserver,80))
        {

                g_mylog.WriteLog(_T("IsCMNet::Connect fail"),LNORMAL);
                return FALSE;
        }
        g_mylog.WriteLog(_T("IsCMNet::Send"),LNORMAL);
        if(wsSMTPServer.Send("\0",1,0)<=0)
        {

                g_mylog.WriteLog(_T("IsCMNet::Send fail"),LNORMAL);
                return FALSE;
        }
        return TRUE;
}

BOOL CSock::ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen)
{
        g_mylog.WriteLog(_T("CSock::ConnectHelper"),LNORMAL);
         if (m_pbBlocking != NULL)
        {
                WSASetLastError(WSAEINPROGRESS);
                return  FALSE;
        }

        m_nConnectError = -1;
        unsigned   long   argp   =   1;   
        int ret   =   ioctlsocket(m_hSocket,FIONBIO,(unsigned   long*)&argp);   
        if(ret == SOCKET_ERROR)   
        {   
                closesocket(m_hSocket);   
                g_mylog.WriteLog(_T("CAsyncSocket::SET_SOCK_OPT_FAIL"),LNORMAL);
                return   FALSE; //SET_SOCK_OPT_FAIL   
        }
        g_mylog.WriteLog(_T("CAsyncSocket::ConnectHelper"),LNORMAL);
         if (!CCeSocket::ConnectHelper(lpSockAddr, nSockAddrLen))
        {
                if (GetLastError() == WSAEWOULDBLOCK)
                {
                        CTime curt, st;
                        CTimeSpan span(0, 0, 0, m_dwTimeOut);
                        st = CTime().GetCurrentTime();
                         g_mylog.WriteLog(_T("CAsyncSocket::WSAEWOULDBLOCK"),LNORMAL);
                        while (PumpMessages(FD_CONNECT))
                        {
                                curt = CTime().GetCurrentTime();       
                                if(curt > (st+span))
                                {
                                         g_mylog.WriteLog(_T("CSock::time out"),LNORMAL);
                                         return FALSE;  // No need for idle time processing.
                                }
                                g_mylog.WriteLog(L"no timeout",LNORMAL);
                                if (m_nConnectError != -1)
                                {
                                        WSASetLastError(m_nConnectError);
                                        return (m_nConnectError == 0);
                                }
                        }
                }
                return FALSE;
        }
        return TRUE;
}

最新回复

周末人气低,帮顶了  详情 回复 发表于 2009-11-28 17:21
点赞 关注

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
周末人气低,帮顶了
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表