• 简单处理IP XML数据


    ///* 编译环境: visual c++ */ 
    //#include <stdio.h> 
    //#include <winsock2.h> 
    //#pragma comment(lib,"ws2_32.lib") 
    //
    //int doit(int, char **) 
    //{ 
    //	char host_name[255]; 
    //	//获取本地主机名称 
    //	if (gethostname(host_name, sizeof(host_name)) == SOCKET_ERROR) { 
    //		printf("Error %d when getting local host name.
    ", WSAGetLastError()); 
    //		return 1; 
    //	} 
    //	printf("Host name is: %s
    ", host_name); 
    //
    //	//从主机名数据库中得到对应的“主机” 
    //	struct hostent *phe = gethostbyname(host_name); 
    //	if (phe == 0) { 
    //		printf("Yow! Bad host lookup."); 
    //		return 1; 
    //	} 
    //
    //	//循环得出本地机器所有IP地址 
    //	for (int i = 0; phe->h_addr_list[i] != 0; ++i) { 
    //		struct in_addr addr; 
    //		memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr)); 
    //		printf("Address %d : %s
    " , i, inet_ntoa(addr)); 
    //	} 
    //
    //	return 0; 
    //} 
    //
    //int main(int argc, char *argv[]) 
    //{ 
    //	WSAData wsaData; 
    //	if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) { 
    //		return 255; 
    //	} 
    //
    //	int retval = doit(argc, argv); 
    //
    //	WSACleanup(); 
    //	return retval; 
    //}
    
    
    
    #include <iostream>
    #include <string>
    #include <cstdlib>
    #include <afxinet.h>
    #include "tinyxml.h"
    #pragma comment(lib, "tinyxml.lib")
    #pragma comment(lib, "tinyxmlSTL.lib")
    using namespace std;
    
    std::string getIp()
    {
    	CString url = "http://ip.dnsexit.com/";
    	CString content;
    	CString data;
    	DWORD dwStatusCode;
    	CInternetSession session("HttpClient");
    
    	CHttpFile* pfile = (CHttpFile *)session.OpenURL(url);
    	pfile -> QueryInfoStatusCode(dwStatusCode);
    	if(dwStatusCode == HTTP_STATUS_OK)
    	{ 
    		while (pfile -> ReadString(data))
    		{
    			content  += data;
    		}
    	}
    	pfile -> Close();
    	delete pfile;
    	session.Close();
    	return std::string(content);
    }
    
    void getXml(string url)
    {
    	CFile file(("temp.xml"), CFile::modeCreate|CFile::modeWrite);
    	CString content;
    	CString data;
    	DWORD dwStatusCode;
    	CInternetSession session("HttpClient");
    
    	CHttpFile* pfile = (CHttpFile *)session.OpenURL(url.c_str());
    	pfile -> QueryInfoStatusCode(dwStatusCode);
    	if(dwStatusCode == HTTP_STATUS_OK)
    	{
    		while (pfile -> ReadString(data))
    		{
    			content  += data;
    		}
    	}
    	pfile -> Close();
    	delete pfile;
    	session.Close();
    	file.Write(content, content.GetLength());
    	file.Close();
    }
    
    void readXml()
    {
    	TiXmlDocument doc("temp.xml");
    	doc.LoadFile();
    	TiXmlElement* root = doc.RootElement();
    	TiXmlNode* item = root->FirstChild("product");
    	TiXmlNode* child = item->FirstChild();
    	string ip = child->ToElement()->GetText();
    	if (!ip.empty()) 
    	{
    		cout << "ip = " << ip << endl;
    	} 
    
    	child = item->IterateChildren(child);
    	string addr = child->ToElement()->GetText();
    	if (!addr.empty())
    	{
    		cout << "address = " << addr << endl;
    	} 
    }
    
    int main()
    {
    	string str = "http://www.yodao.com/smartresult-xml/search.s?type=ip&q=";
    	str+= getIp();
    	getXml(str);
    	readXml();
    	system("del temp.xml");
    	system("pause");
    	return 0;
    }  

    tinyxml的编译参数要严格与所写程序匹配,比如runtime library Use of MFC, Character Set,否则就会爆出这样不知所云的错误:

    1>libcmt.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(wsetloca.obj) : error LNK2005: __configthreadlocale already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(crt0dat.obj) : error LNK2005: __cexit already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(crt0dat.obj) : error LNK2005: __exit already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(mlock.obj) : error LNK2005: __lock already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(mlock.obj) : error LNK2005: __unlock already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(winapisupp.obj) : error LNK2005: ___crtSetUnhandledExceptionFilter already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(winapisupp.obj) : error LNK2005: ___crtTerminateProcess already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(winapisupp.obj) : error LNK2005: ___crtUnhandledException already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) already defined in msvcrtd.lib(MSVCR110D.dll)
    1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in msvcrtd.lib(cinitexe.obj)
    1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in msvcrtd.lib(cinitexe.obj)
    1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in msvcrtd.lib(cinitexe.obj)
    1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in msvcrtd.lib(cinitexe.obj)
    1>libcmt.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in msvcrtd.lib(MSVCR110D.dll)
    1>LINK : warning LNK4098: defaultlib 'msvcrtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
    1>msvcrtd.lib(cinitexe.obj) : warning LNK4098: defaultlib 'libcmt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
    1>D:VS2010OnlyForFunOnlyForFunDebugReadXml.exe : fatal error LNK1169: one or more multiply defined symbols found
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    log4net使用
    第二天 ado.net, asp.net ,三层笔记
    第一天上传我的前端基础笔记
    开通博客的第一天上传我的C#基础笔记。
    VS 星期作业 if else的应用 做一个受不受异性欢迎的小程序
    ****************VS编码操作实践******************
    VS基本学习之(变量与常量)
    VS的基本学习
    2016.4.10 重生
    【python之路3】if 语句
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834943.html
Copyright © 2020-2023  润新知