概述
VC实现json向服务端发送数据
本文介绍了一种通过VC结合json向服务端发送数据的方法。
json头文件及库文件
VC6.0及VS2010对应生成的json库文件工程源码获取地址:http://download.csdn.net/detail/shufac/9066215
新建一个VC工程,加载json相关的头文件以及前面json库文件工程生成的lib文件,如下图所示,
图1 加载头文件至新工程中
打开工程属性---链接器---输入---附件依赖项,添加对应模式(Debug或Release)的lib文件,如图2所示,
图2 添加lib文件依赖
客户端向服务端发送请求的函数
bool CXXXDlg::put_content_url(CString strURL, const char content[], char content_return[])
{
bool bResult = false;
DWORD dwType = 0;
CString strServer;
CString strObject;
INTERNET_PORT wPort = 0;
DWORD dwFileLength = 0;
CHttpConnection * pHC = NULL;
CHttpFile * pHF = NULL;
CInternetSession cis;
bResult =
AfxParseURL(strURL, dwType, strServer, strObject, wPort);
if(!bResult)
{
return false;
}
int iCount=0;
bool bRet=true;
while (bRet)
{
if (iCount>2)
{
bRet=false;
}
try
{
++iCount;
const int nTimeOut = 10000;
cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, nTimeOut); //联接超时设置
cis.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 6);
//重试6次
pHC = cis.GetHttpConnection(strServer, wPort);
//取得一个Http联接
pHF = pHC->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject);
if(!pHF->SendRequest(NULL, 0, (void*)content, strlen(content)))
{
pHF->Close();
pHC->Close();
cis.Close();
return false;
}
DWORD dwStateCode = 0;
pHF->QueryInfoStatusCode(dwStateCode);
CFileStatus cfilestatus;
if(dwStateCode == HTTP_STATUS_OK)
{
pHF->Read(content_return, SERVER_CONTENT_LEN);
bResult = true;
//退出循环
bRet=false;
}
}
catch(CInternetException * pEx)
{
DWORD dwError = GetLastError();
#if XXX_DEBUG==1
char tmp[512];
sprintf(tmp, "xxx InternetException occur!%d", dwError);
OutputDebugStringA(tmp);
#endif
}
catch(...)
{
DWORD dwError = GetLastError();
#if XXX_DEBUG==1
char tmp[512];
sprintf(tmp, "xxx Unknow Exception occur!%d", dwError);
OutputDebugStringA(tmp);
#endif
}
}
pHF->Close();
pHC->Close();
cis.Close();
return bResult;
}
说明:
1.参数1是服务器对应的IP地址;
2.参数2是客户端发送给服务端的json语句;
3.参数3是服务端返回给客户端的json语句。
通过这个函数就可以完成客户端与服务端之间的握手通信了。
解析服务端返回json语句
我们最终的目的是完成客户端和服务端握手通信,客户端向服务端发送请求,然后从服务端获取我们需要的信息,这种通信语句全部是json格式的,转换成有用的信息还需要进一步的解析。
Json::Reader reader;
Json::Value root;
if (reader.parse(content_from_server, root))
{
//解析int值
ack_num = root["ack"].asInt();
iStatus=root["status"].asInt();
//解析字符串
Json::Value val_result = root["result"];
memset(previous_method, 0, sizeof(previous_method));
strcpy(previous_method, val_result["previousMethod"].asString().c_str());
}
通过以上3步,基本可以完成数据发送和解析工作了。后面再介绍通过json来实现文件传送的方法。
最后
以上就是从容人生为你收集整理的VC实现json向服务端发送数据VC实现json向服务端发送数据的全部内容,希望文章能够帮你解决VC实现json向服务端发送数据VC实现json向服务端发送数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复