`
op380op
  • 浏览: 15491 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

SDK网络连接/多线程示例代码

 
阅读更多

SDK网络连接/多线程示例代码
2010年06月09日
  
        static BOOL SendMsg(wstring url) 
  { 
  DWORD dwNetWorkStatus = QueryNetWorkStatus(); 
  HINTERNET hSession = NULL,hConnection = NULL,hOpenRequest = NULL; 
  //如果没有网络则连接网络 
  if (dwNetWorkStatus == NETWORK_NONE) 
  { 
  Dial_StartGprsConnect2(0,GPRS_FORCE_APP_TYPE); 
  //联网后重新查询网络类型 
  dwNetWorkStatus = QueryNetWorkStatus(); 
  } 
  //判定是否为cmwap,使用代理 
  if (dwNetWorkStatus == NETWORK_EDGE_PROXY) 
  hSession = InternetOpen(L"Meizu", INTERNET_OPEN_TYPE_PROXY, L"10.0.0.172:80", NULL, 0); 
  else 
  hSession = InternetOpen(L"Meizu", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 
  string url_utf8 = MzConvert::UnicodeToUTF8(url);//编码 
  url = ::MzConvert::string2wstring(url_utf8); 
  //打开链接,获取文件 
  HINTERNET hHttpFile = InternetOpenUrlW(hSession, url.c_str(), NULL, 0,INTERNET_FLAG_RELOAD, 0); 
  //读取文件内容 
  char buf[1024]={0}; 
  DWORD dwRead=0; 
  BOOL  ReadReturn=InternetReadFile(hHttpFile,(LPVOID)buf, 1024+1,&dwRead); 
  wstring str = MzConvert::UTF8ToUnicode(string(buf));//解码 
  //关闭连接 
  InternetCloseHandle(hSession); 
  return true; 
  }
这里面编码解码很重要的,不然中文乱码问题很头疼!
  多线程:
  声明:static DWORD WINAPI ThreadProc (LPVOID pArg);
  static wstring SEND = L"http://quickfetion.appspot.com/sendmsg?username=?;password=?;sendto=?;message=?";
  定义:static DWORD WINAPI ThreadProc (LPVOID pArg)
  {
  wstring *c = (wstring*)pArg;
  wstring url = wstring(*c);
  CQuickFxMainWnd::SendMsg(url);
  return 1;
  }
  调用:HANDLE hThread = CreateThread(NULL, 0, ::ThreadProc,&SEND, 0, 0);
  这里注意函数定义形式,static关键字,还有全局概念,否则出现线程阻塞,不可访问资源的错误!
  个人理解,各位高手莫要见笑!!!
  附上编码解码的头文件:
 
  using namespace std; 
  class MzConvert 
  { 
  public: 
  static wstring string2wstring(const string& s) 
  { 
  int len; 
  int slength = (int)s.length() + 1; 
  len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); 
  wchar_t* buf = new wchar_t[len]; 
  MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len); 
  std::wstring r(buf); 
  delete[] buf; 
  return r; 
  } 
  static wstring ANSIToUnicode( const string& str ) 
  { 
  int len = str.length(); 
  int unicodeLen = ::MultiByteToWideChar( CP_ACP, 0, str.c_str(), -1, NULL, 0 ); 
  wchar_t * pUnicode; 
  pUnicode = new wchar_t[unicodeLen+1]; 
  memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 
  MultiByteToWideChar( CP_ACP, 0, str.c_str(), -1, (LPWSTR)pUnicode, unicodeLen ); 
  wstring rt = ( wchar_t* )pUnicode; 
  delete pUnicode; 
  return rt; 
  } 
  static string UnicodeToANSI( const wstring& str ) 
  { 
  char* pElementText; 
  int iTextLen; 
  // wide char to multi char 
  iTextLen = WideCharToMultiByte( CP_ACP, 0, str.c_str(), -1, NULL, 0, NULL, NULL ); 
  pElementText = new char[iTextLen + 1]; 
  memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) ); 
  WideCharToMultiByte( CP_ACP, 0, str.c_str(), -1, pElementText, iTextLen, NULL, NULL ); 
  string strText = pElementText; 
  delete[] pElementText; 
  return strText; 
  } 
  static wstring UTF8ToUnicode( const string& str ) 
  { 
  int len = str.length(); 
  int unicodeLen = ::MultiByteToWideChar( CP_UTF8, 0, str.c_str(), -1, NULL, 0 ); 
  wchar_t * pUnicode; 
  pUnicode = new wchar_t[unicodeLen+1]; 
  memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 
  MultiByteToWideChar( CP_UTF8, 0, str.c_str(), -1, (LPWSTR)pUnicode, unicodeLen ); 
  wstring rt = ( wchar_t* )pUnicode; 
  delete pUnicode; 
  return rt; 
  } 
  static string UnicodeToUTF8( const wstring& str ) 
  { 
  char* pElementText; 
  int iTextLen; 
  // wide char to multi char 
  iTextLen = WideCharToMultiByte( CP_UTF8, 0, str.c_str(), -1, NULL, 0, NULL, NULL ); 
  pElementText = new char[iTextLen + 1]; 
  memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) ); 
  WideCharToMultiByte( CP_UTF8, 0, str.c_str(), -1, pElementText, iTextLen, NULL, NULL ); 
  string strText = pElementText; 
  delete[] pElementText; 
  return strText; 
  } 
  };

  [ 本帖最后由 zhaxg 于 2009-10-13 08:59 编辑 ]
分享到:
评论

相关推荐

    vc++ 应用源码包_6

    OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制...

    vc++ 应用源码包_5

    OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制...

    vc++ 应用源码包_3

    OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制...

    Android高级编程--源代码

    作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...

    vc++ 应用源码包_1

    OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制...

    vc++ 应用源码包_2

    OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制...

    vc++ 开发实例源码包

    OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology 文档。 P2P视频技术源码(含开发文档) 目前的协议有如下一些特点: 1) 客户向服务器发送请求,...

    10大经典Android开源项目分享(学习android必备)

    从该项目代码中,可以学会如何同步、多线程、HTTP连接等技术。  7、 Pedometer  Pedometer应用用于记录你每天走路步数的。尽管记录不一定精准,但是从这个项目中,可以学习几个不同的技术:加速器交互、语音更新...

    Android开发案例驱动教程 配套代码

    8.1 多线程案例--计时器 155 8.2 线程概念 156 8.2.1 进程概念 156 8.2.2 线程概念 156 8.3 Java中的线程 157 8.3.1 Java中的实现线程体方式1 157 8.3.2 Java中的实现线程体方式2 160 8.3.3 Java中的实现线程...

    10个经典的Android开源应用项目

    从该项目代码中,可以学会如何同步、多线程、HTTP连接等技术。  7、 Pedometer  Pedometer应用用于记录你每天走路步数的。尽管记录不一定精准,但是从这个项目中,可以学习几个不同的技术:加速器交互、语音更新...

    android 10个开源项目的学习

    从该项目代码中,可以学会如何同步、多线程、HTTP连接等技术。  7、 Pedometer  Pedometer应用用于记录你每天走路步数的。尽管记录不一定精准,但是从这个项目中,可以学习几个不同的技术:加速器交互、语音更新...

    JAVA上百实例源码以及开源项目源代码

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    X-Scan

    采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能,提供了图形界面和命令行两种操作方式,扫描内容包括:远程服务类型、操作系统类型及版本,各种弱口令漏洞、后门、应用服务漏洞、网络设备漏洞...

    X-Scan v3.1

    采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能,提供了图形界面和命令行两种操作方式,扫描内容包括:远程服务类型、操作系统类型及版本,各种弱口令漏洞、后门、应用服务漏洞、网络设备...

    java开源包4

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

    精通WindowsAPI 函数 接口 编程实例

    6.3.3 创建远程线程、将代码注入其他进程中执行 167 6.3.4 创建纤程、删除纤程、调度纤程 170 6.3.5 纤程与线程的互相转换 171 6.4 进程状态信息 176 6.4.1 PS API与Tool help API 176 6.4.2 遍历系统中...

    JAVA上百实例源码以及开源项目

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    Java资源包01

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

    java开源包8

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

Global site tag (gtag.js) - Google Analytics