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

本文介绍如何使用VC结合JSON实现客户端与服务端的数据交互,包括发送请求、处理响应及解析JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

json头文件及库文件

VC6.0及VS2010对应生成的json库文件工程源码获取地址:http://download.youkuaiyun.com/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来实现文件传送的方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法哥2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值