VC实现json向服务端发送数据

╰+哭是因爲堅強的太久メ 2022-07-16 02:59 304阅读 0赞

VC实现json向服务端发送数据

本文介绍了一种通过VC结合json向服务端发送数据的方法。

json头文件及库文件

VC6.0及VS2010对应生成的json库文件工程源码获取地址:http://download.csdn.net/detail/shufac/9066215

新建一个VC工程,加载json相关的头文件以及前面json库文件工程生成的lib文件,如下图所示,

Center

图1 加载头文件至新工程中

打开工程属性—-链接器—-输入—-附件依赖项,添加对应模式(Debug或Release)的lib文件,如图2所示,

Center 1

图2 添加lib文件依赖

客户端向服务端发送请求的函数

bool CXXXDlg::put_content_url(CString strURL, const char content[], char content_return[])

  1. {
  2. bool bResult = false;
  3. DWORD dwType = 0;
  4. CString strServer;
  5. CString strObject;
  6. INTERNET_PORT wPort = 0;
  7. DWORD dwFileLength = 0;
  8. CHttpConnection * pHC = NULL;
  9. CHttpFile * pHF = NULL;
  10. CInternetSession cis;
  11. bResult = AfxParseURL(strURL, dwType, strServer, strObject, wPort);
  12. if(!bResult)
  13. {
  14. return false;
  15. }
  16. int iCount=0;
  17. bool bRet=true;
  18. while (bRet)
  19. {
  20. if (iCount>2)
  21. {
  22. bRet=false;
  23. }
  24. try
  25. {
  26. ++iCount;
  27. const int nTimeOut = 10000;
  28. cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, nTimeOut); //联接超时设置
  29. cis.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 6); //重试6次
  30. pHC = cis.GetHttpConnection(strServer, wPort); //取得一个Http联接
  31. pHF = pHC->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject);
  32. if(!pHF->SendRequest(NULL, 0, (void*)content, strlen(content)))
  33. {
  34. pHF->Close();
  35. pHC->Close();
  36. cis.Close();
  37. return false;
  38. }
  39. DWORD dwStateCode = 0;
  40. pHF->QueryInfoStatusCode(dwStateCode);
  41. CFileStatus cfilestatus;
  42. if(dwStateCode == HTTP_STATUS_OK)
  43. {
  44. pHF->Read(content_return, SERVER_CONTENT_LEN);
  45. bResult = true;
  46. //退出循环
  47. bRet=false;
  48. }
  49. }
  50. catch(CInternetException * pEx)
  51. {
  52. DWORD dwError = GetLastError();
  53. #if XXX_DEBUG==1
  54. char tmp[512];
  55. sprintf(tmp, "xxx InternetException occur!%d", dwError);
  56. OutputDebugStringA(tmp);
  57. #endif
  58. }
  59. catch(...)
  60. {
  61. DWORD dwError = GetLastError();
  62. #if XXX_DEBUG==1
  63. char tmp[512];
  64. sprintf(tmp, "xxx Unknow Exception occur!%d", dwError);
  65. OutputDebugStringA(tmp);
  66. #endif
  67. }
  68. }
  69. pHF->Close();
  70. pHC->Close();
  71. cis.Close();
  72. return bResult;
  73. }

说明:

1.参数1是服务器对应的IP地址;

2.参数2是客户端发送给服务端的json语句;

3.参数3是服务端返回给客户端的json语句。

通过这个函数就可以完成客户端与服务端之间的握手通信了。

解析服务端返回json语句

我们最终的目的是完成客户端和服务端握手通信,客户端向服务端发送请求,然后从服务端获取我们需要的信息,这种通信语句全部是json格式的,转换成有用的信息还需要进一步的解析。

  1. Json::Reader reader;
  2. Json::Value root;
  3. if (reader.parse(content_from_server, root))
  4. {
  5. //解析int值
  6. ack_num = root["ack"].asInt();
  7. iStatus=root["status"].asInt();
  8. //解析字符串
  9. Json::Value val_result = root["result"];
  10. memset(previous_method, 0, sizeof(previous_method));
  11. strcpy(previous_method, val_result["previousMethod"].asString().c_str());
  12. }

通过以上3步,基本可以完成数据发送和解析工作了。后面再介绍通过json来实现文件传送的方法。

发表评论

表情:
评论列表 (有 0 条评论,304人围观)

还没有评论,来说两句吧...

相关阅读