內部邀請碼: C8E245J (不寫邀請碼,沒有現金送)
國內私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統掛牌的公眾公司,股票代碼為430719,為“中國PE第一股”,市值超1000億元。
感謝luma qq 關於地址庫的格式描述:
http://lumaqq.linuxsir.org/article/qqwry_format_detail.html
因客戶需求,需要分析用戶數據,需要知道用戶訪問時的國家信息,目前僅僅知道ip地址,如何知道國家信息呢?第一反應就是找個ip地址庫。對照查找下即可。
想想國內的ip地址庫,比較全面的算是顯IP的QX版本了。中間用了ip地址庫。可以分析這個庫文件。OK,思路確定,Go
1、 下載顯IP版的地址庫
2、 分析庫文件格式。 格式說明:http://lumaqq.linuxsir.org/article/qqwry_format_detail.html
3、 根據格式說明,編寫代碼
貼出設計
關鍵類及說明:
BaseDataReader |
基礎的數據讀取類 |
DirectReader |
直接讀取數據的模式實現 |
Model1Reader |
模式1讀取器 |
Model2Reader |
模式2讀取器 |
IPRecordFactory |
讀取器的創建工廠 |
|
|
ISearch |
搜索的接口 |
BinarySearch |
二分法搜索的實現 |
FullSearch |
全文件搜素 |
寫個Demo測試下
注意事項:
1、 ip字符串轉化為整形時,需要注意字節序。
.net framework 默認為 litter-endian
ip 字符串的現實方式是 big-endian
2、 int 與 uint 是由區別的
看到這個,可能你會笑,誰不知道呢?嘿嘿,以前我就不知道,或者說是知道他們的區別,但不知道各自應用場景。
經常寫應用的人是不會注意這些細節問題的,只要應用運行正常就可以了,不會關注底層的具體使用什么數據類型。
這次寫代碼的過程中,一開始都都是使用 int,調試到最后才發現大數據轉化為 int 時,居然變成了 –xxxxxxx (負數)了,與實際的有差別,才反應過來,原來如此。
3、 算法的使用。
因 .net framework 提供的大部分的內存數據結構(Hashtable,list,Dictionary等),經常使用他們構建數據,導致要寫基本的算法時,頭大了。最后才慢慢的想起來,磕磕碰碰寫完了。此時深深的體會到,算法的威力(編程的內功)
4、 堅持就是勝利。有想法就盡快付諸行動,存在腦子的東西,永遠是不會被他人知曉的。
貼上測試代碼:
ipqueryDemo 請在如下地址下載 qqwry.dat ,放置到 bin 目錄下即可,切記切記!
ip 庫下載地址: http://www.onlinedown.net/soft/19051.htm
完整Demo:
ipQuery庫使用說明:
http://www.cnblogs.com/AloneSword/archive/2012/06/19/2555380.html