最近需要在客戶端加入檢測用戶IP地址,便於分析信息來源的功能。 然而socket的API所獲取到的IP是局域網的,查了下資料,只有穿過NAT之後才能拿到客戶的出口IP地址。 於是變通了一下思路,採用訪問一個web程序的方式,根據http get返回信息拿到客戶端的IP。
測試,用asp寫了一句.
代碼:
<%=Request.ServerVariables("REMOTE_ADDR") %>
然後用了現成的 基於c的curl開發包,用於向web服務器發起一次請求並且接收數據。這個curl庫很強大,支持文件上傳下載,http get提交,post提交等等很多功能。有興趣的朋友可以瞭解一下。
之後就很簡單了,針對curl進行了一次簡單的封裝,然後發起一個請求並接收就OK
代碼:
receiveInfo myReceiveInfo;
//定義獲取IP的http地址
std::string url = "http://www.pal66.com/alan/getip/index.asp";
//返回IP
std::string wanIpStr = myReceiveInfo.ReceiveGetInfo(url);
//轉換格式
m_localWanIp =wxString(wanIpStr .c_str(),wxConvUTF8);
程序在 Release.part01.rar - Release.part04.rar 沒辦法.支持wxWidgets的運行庫有點大,什麼時候Win7能夠把wxWidgets的運行庫內置就完美了。
windows xp sp3+wxWidgets2.8.9 +CodeBlocks8.0.2+gcc 3.4.5 環境下編譯通過
用vc或者其他工具的朋友。其實將代碼中負責http請求的 curlPlus.h curlPlus.cpp 單獨拿出來加入到自己的工程裏就可以了。這個類是基於標準C++的,爲的是將curl 的c語言風格接口再封裝一次,更加方便而已。