做軟體免不了和各種開放的私有的協議打交道,有的時候遇到不走尋常路的protocol,那就真的不能走尋常路了,勇敢的掏出利器,讓領導哭吧^_^
言歸正傳,乙個kuwait專案中,client和server之間個性化的定義了乙個協議,協議版本還是draft的,大家就開工了,除了做client,boss還希望做乙個模擬的server,這樣除錯方便
。難點是,協議基於二進位制資料流,資料流中可選域很多,不同型別的報文之間,沒有明顯的規律可循,並且client發給server的報文,比server反饋的報文複雜很多(俺攤上做server,解析client報文,oh 那個 my~...)
好訊息是手裡有基於vc6的乙個模擬server,處理其他協議的,除了協議部分,其它的內容可以借用,比如tcp和串列埠通訊、主要的ui等等。啃文件、人工解析報文後發現,順序解析起來要考慮的事情太多,頭部向後解析一些,尾部向前解析一些,剩下的中間部分再解析一下,這樣似乎比較容易,正所謂掐頭去尾留中間,轉念一想,這不正是正規表示式的強項麼,vc環境,想不到boost都難,於是乎剩下的事情都比較順其自然了,一次美好的mfc+boost的體驗。
限於是公司專案,就不能上例項了,大概的思路
(1)vc6配置boost lib,拜google
(2)boost + stl string試驗,拜google + conding
(3)人工解析的報文,換用boost regex解析測試
(4)交工,功能可以,維護性不好說
摘錄幾個用到的regex,留個念想
(第1個是解析一種型別報文的,後面3個和在一起解析另外一種報文,其它報文類似)
std::string str_recon = "^(\\d)(\\d)(\\d)([0-9a-f])([\\x20-\\x7a])(\\d)(\\|)(\\|)(\\|)(\\|)(\\d)(\\d)(\\|)(\\d)(\\|)(\\d)(\\|)(\\d)(\\|)(\\d)(\\|)([0-9a-f])";
std::string str_et = "^(\\d)(\\d)(\\d)([0-9a-f])([\\x20-\\x7a])(\\d)(\\|)([\\x20-\\x7a~])(\\|)(\\d)(\\|)([\\x20-\\x7a~])(\\|)(\\d)(\\d)()(\\|)(\\d)(.*)(\\|)((?:)|[\\x20-\\x7a]|[\\x20-\\x7a])(\\|?)((?:)|[0-9a-f])([0-9a-f])$";
std::string str_et_ic = "^(\\|?)(\\d)(\\|)(\\d)(\\|)(\\d)(\\|)(\\d)(\\|)(\\d)(\\|)(.*)$";
std::string str_et_ic_29f = "^([\\x20-\\x7a])([\\x20-\\x7a])([\\x20-\\x7a])([\\x20-\\x7a])([\\x20-\\x7a])(\\d)([\\x20-\\x7a])(~?)([\\x20-\\x7a])(~?)((?:)|[\\x20-\\x7a])(~?)((?:)|[\\x20-\\x7a])(~?)((?:)|[\\x20-\\x7a])(~?)((?:)|[\\x20-\\x7a])(~?)((?:)|[\\x20-\\x7a])$";
電子文件安全管理 魔高一尺,道高一丈
隨著計算機滲透到社會生活的各個方面,人類已經進入資訊時代,社會和每個人對資訊資源的依賴越來越大。一方面資訊已經成為人類的重要資產,在政治 經濟 軍事 教育 科技以及日常生活等各方面發揮著重要作用,成為真正的第一生產力 另一方面,計算機技術突飛猛進的發展並給人們帶來便捷的同時,資訊保安問題也變得日益突...
魔高一尺,道高一丈 教你如何安全賣鏈結
你看了這個題,就會想到,又不是老法師,還要給 施法嗎?當然不是給 施法。首先我說明一下什麼叫賣鏈結,就是在自己的 上放上其它 的乙個鏈結,換句話說就是以前的廣告的縮小版。為什麼人家要賣鏈結呢,那是因為人家賣鏈結可以提高自己 在搜尋引擎下的權重,也就是他 的某個關鍵字在搜尋引擎下的排名。那麼我們賣鏈結...
魔高一丈 國外有玩家繞過WGA盜版驗證
魔高一丈 國外有玩家繞過wga盜版驗證 果然不出所料,今天正好3日,wga 的破解出現了.從這位破解的方法 原理很簡單 來看,微軟的確沒有想把路堵得太死,畢竟,這不是 流氓軟體 微軟針對 windows xp 推出的最新反盜版檢測引起了不少迴響,已經有人在某個技術blog中登出了繞過系統盜版驗證的方...