evc里如何实现连接URL并下载网页内容?

莱昂纳多达芬奇 2008-05-03 09:30:38
小弟初涉EVC编程,发现与VC++还是有不小的差别。
现在在做一个程序,需要连接网络并从服务器下载数据,在VC里面用CInternetSession的OpenURL()可以实现该功能,但是在EVC里,只有模拟器下可以通过调试,在设备中提示“无法与服务器建立连接”。(注:设备是HP的iPaq2100)

另外有个很奇怪的现象:又一次在用设备调试的时候出现错误,引发一系列问题。。最后硬启的设备,却发现可以实现连接下载功能了,但是在打开一次IE后又出现上述问题,疑惑不解。

有没有高手做过网络编程这块的,感谢给出答复!
...全文
266 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
paniclp 2012-09-06
  • 打赏
  • 举报
回复
问题在于netSession默认的连接方式是CInternetSession(
LPCTSTR pstrAgent = NULL,
DWORD_PTR dwContext = 1,
DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,
LPCTSTR pstrProxyName = NULL,
LPCTSTR pstrProxyBypass = NULL,
DWORD dwFlags = 0
);
PRE_CONFIG_INTERNET_ACCESS需要改成INTERNET_OPEN_TYPE_DIRECT 就可以了
zjy104033018 2009-01-06
  • 打赏
  • 举报
回复
我也有这个问题 http://topic.csdn.net/u/20090106/16/4ddb4335-5940-442c-922b-a89a01405469.html 帮忙看看 谢谢
  • 打赏
  • 举报
回复
按照序列函数的顺序,程序已经调通了!
谢谢lenux,谢谢所有关心的朋友!
虽然在InternetRead函数的地方也遇到了一些问题。。。不过最终还是成功了。
sduzhou 2008-05-05
  • 打赏
  • 举报
回复
恭喜lenux,已经有星星了
lenux 2008-05-05
  • 打赏
  • 举报
回复
我觉得你可以在
netFile = (CHttpFile*) netSession.OpenURL(strURL,1,dwFlag);
中把dwFlag分别设成
INTERNET_OPEN_TYPE_DIRECT
INTERNET_OPEN_TYPE_PRECONFIG
INTERNET_OPEN_TYPE_PROXY //如果有proxy
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY
来试一下。

我使用的是
InternetOpen
InternetCrackUrl
InternetConnect
HttpOpenRequest
HttpSendRequest
InternetReadFile
等序列函数来实现的。不过原理应该是一样的。

1,代理问题,因为在硬启设备后,没有开过IE的情况下,设备下运行程序正常。开过一次IE后程序就不正常了。
的可能比较大。
打开IE后IE会自动进行一些设置的。

在IE设置里,在设置proxy的地方看看有没有 no autodial的,勾上试试。
我在wifi的情况下,ce的IE有时候也是会出问题的。
  • 打赏
  • 举报
回复
sigh~~~还是不行啊。老问题

问题就在这一句:
netFile = (CHttpFile*) netSession.OpenURL(strURL,1,dwFlag);

执行这句的时候就会提示“无法与服务器建立连接”
按11楼的方法建立session也是同样的问题。。。

头都大了。唉
  • 打赏
  • 举报
回复
谢谢热心的lenux,但是我的问题依然存在。我试了那些dwFlag,还是不行。我觉得我得尝试下你说的下面的序列函数了。
如果你方便的话,能给我一点代码的框架么?如果不方便贴出来,可以发我邮箱
david_yxw@163.com
在IE里基本没有设置可以用,在系统设置-连接里面我找到一些相应的东西,但是试过还是有问题。
IE启动的时候应该是有什么默认自动设置的。。
再次感谢!
lenux 2008-05-04
  • 打赏
  • 举报
回复
你的程序从测试有无物理链接-建立网络链接-尝试链接服务器
的做法,能描述一下吧
  • 打赏
  • 举报
回复
网络连接是好的。
2种方式:
1,通过Activesync同步,这时候是可以连接到网络的,IE,MSN都可以用。
2,通过自带网卡,接网线后,可以连接到网络。
其实还有第三种方式,用无线网卡连接wifi,但是我觉得和上面第二种没区别。

我觉得问题出在程序上。
一个很值得关注的问题是“为什么硬启后程序就可以连接,而打开一次IE后,就不能连接服务器了”
lenux 2008-05-04
  • 打赏
  • 举报
回复
你已经和网络建立物理链接了吗?

例如GPRS或者通过activesync从Pc上链接internet

你的具体操作说一下
  • 打赏
  • 举报
回复
呵呵,网上也搜到过有问这个问题的朋友,只是觉得这里高手如云应该可以得到解答!
谢谢楼上热心了!
  • 打赏
  • 举报
回复
代码没有报错的地方,在模拟器里运行正常。就是在设备上运行的时候提示“无法与服务器建立连接”。

后来不在evc下做了,在vs2005下做同样的程序,模拟器下也不能得到网络数据了,GetHttpConnection在后来的代码里是有的,但是我发现返回的值一直是零。。。

我觉得问题有这么几个可能:
1,代理问题,因为在硬启设备后,没有开过IE的情况下,设备下运行程序正常。开过一次IE后程序就不正常了。
2,编码问题,在wince下是unicode,服务器端是ASCII,但是,后来的工程下添加了转换语句,结果还是不行。发现一直没有返回值。

谢谢您的回复。11楼的方法我明天试试。
lenux 2008-05-04
  • 打赏
  • 举报
回复
我觉得可能是不同的网络链接方式需要不同的参数来建立Session
DWORD dwFlags = 0;
InternetGetConnectedState( &dwFlags, 0 );
CInternetSession session( NULL, 1,
( dwFlags & INTERNET_CONNECTION_PROXY ) == INTERNET_CONNECTION_PROXY ?INTERNET_OPEN_TYPE_PRECONFIG :INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);

你用这个试试,
lenux 2008-05-04
  • 打赏
  • 举报
回复
还需要GetHttpConnection 来获取链接吧。我看你好像没有做。
lenux 2008-05-04
  • 打赏
  • 举报
回复
代码在那行出了问题?
  • 打赏
  • 举报
回复
自带网卡是不用驱动的,接网线后按默认设置就可以连接到网络了。

程序是引用了
#include "afxinet.h"
//#include "Wininet.h"
//#pragma comment(lib,"wininet.lib")
不过MS只要引用最上面的afxinet就可以了

可以保证的是,网络的确是连通的。。。因为IE,msn都是可以正常用的。所以没有在本地进行其他设置。(是不是需要再做设置?)
lenux 2008-05-04
  • 打赏
  • 举报
回复
我想知道你怎么通过自带网卡,接网线后,可以连接到网络的?

那部分代码,或者本地配置是怎么样的?

因为你首先要保证网络的确是连通的。
  • 打赏
  • 举报
回复
开始的时候程序大体是这样的

CInternetSession netSession(NULL, 0);
CHttpFile* netFile = NULL;
try
{
netFile = (CHttpFile*) netSession.OpenURL(URL);
}
catch(CInternetException *Exp)
{
netFile = NULL;
Exp->Delete();
}

if(netFile)
{
netFile->Read(buffer,bufferLen);
rtn = (CString)buffer;
netFile->Close();
}
else
{
rtn = "ERROR";
}
netSession.Close();
delete netFile;

其中URL是一个参数。大概的程序结构就是这样的。
帮忙看看吧:)谢谢啦
91program 2008-05-03
  • 打赏
  • 举报
回复
记得这个问题,我以前看过一篇文章,是链接没有建立好!
明天回公司查查看吧。

19,503

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧