Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 397, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

WM5.0+VC8.0发送GET请求的方法

在WM5.0下,通过移动的网关发送GET请求,其实现方法有以下两种:用微软封装的CInternetSession、CHttpFile类和用SOCKET。
用微软封装的CInternetSession、CHttpFile类,必须要给VC8打上SP1补丁,这个补丁装起来比较费事;另外必须采用异步(多线程),否则会超时收不到数据,这是微软的一个BUG;在接收数据时,如果采用C++标准的流操作,那么在解析数据时很有可能出现乱码,这个问题出现的不明显,但是在大数据时,出现的机率很大,用了一天的时间才发现是缓冲的原因,在最后一次向文件中写数据时,如果数据不足以填充整个缓冲区,那么文件中很有可能有乱码,由于这个错误有很大的偶然性,所以很难察觉,建议用MFC封装好的文件类。
用SOCKET将数据封装成HTTP格式发送到服务器端,在程序或进程第一次发送GET请求时,要发两次,第一次收到的是移动网关发给客户端的数据,以后发一次就可以,要格外注意的是,在连续发数据时,要先关掉SOCKET在发,然后再发;在发送完数据,必须要Sleep上几秒,等待接收完数据,这和异步类似;它的接收文件,如果要用文件操作,也建议用MFC封装的类,如果接收的数据比较大时。
综上所述,两种方法的本质其实没什么差别,只是用SOCKET可能比较简单,其他的如用ACE,其原理都一样,还是得异步或多线程。另外在用SOCKET时,接收到的文件中含有以前接收的数据,但是在读文件时确只有本次接收的数据,这一点要注意。

posted on 2008-10-11 23:01 Benjamin 阅读(677) 评论(0)  编辑 收藏 引用 所属分类: PDA/PPC开发


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理