这段时间在做linux下的信息收集并与服务器进行数据交换,经过两个多星期的学习终于初步解决了这个问题.
callback function
static size_t write_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);
return written;
}
read from json file
#define PATH_FILE "/home/aq/test.json"
void ReadJsonMsg()
{
using namespace std;
Json::Reader reader;
Json::Value root;
ifstream ifs;
ifs.open(PATH_FILE, ios::binary);
if(reader.parse(ifs,root))
{
string message = root["message"].asString();
int success = root["success"].asInt();
cout << "Whether success :" << success << endl <<endl;
cout << "The output of return message is :" << message << "" << endl <<endl;
cout << "Reading Complete!" << endl;
}
ifs.close();
}
main function
int main(int argc, char *argv[])
{
using namespace std;
ros::init(argc,argv,"json_ros");
//define the json value
Json::Value root;
root["call"] = Json::Value("1");
Json::FastWriter fw;
std::string number=fw.write(root);
int number_size = number.length();
char JsonData[number_size];
//set JsonData to 0.
memset(JsonData, 0, sizeof(JsonData));
strcpy(JsonData,number.c_str());
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl)
{
//data exchanged
curl_easy_setopt(curl, CURLOPT_URL, "http://");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept:application/json");
headers = curl_slist_append(headers, "Content-Type:application/x-www-form-urlencoded");
headers = curl_slist_append(headers, "charset:utf-8");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "JsonData");
FILE *pagefile;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
fopen(PATH_FILE, "wb+");
if (pagefile)
{
curl_easy_setopt(curl, CURLOPT_WRITEDATA, pagefile);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));
}
fclose(pagefile);
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
ReadJsonMsg();
}