IPMSG飛鴿傳書1——編譯原始碼的方法
IP
Messenger是一款區域網內部聊天、檔案傳輸工具,具有很多優點,如資料通訊不需要建立伺服器、直接在兩臺電腦間通訊和資料傳輸,支援檔案及檔案目錄的傳輸,安全快捷以及小巧方便等優異特點,因此很多公司都採用它作為部門、公司內部的IM即時通訊工具。
IP Messenger在程式結構方面採用了Windows
SDK處理結構,通訊方面採用了TCP/UDP通訊方式,在檔案傳輸處理方面採用檔案對映技術,等等。通過分析IP
Messenger的執行、工作原理,可以提高並加深對Windows處理流程的理解,提高SOCKET程式設計技術等,因此特對其原始碼進行分析,以拋磚引玉,共同提高大家的程式設計技術。
1、IP Messenger原始碼的下載
在寫這篇文章時,IP Messenger的最新版本是2.06,因此大家在下載時儘量選擇最新版本下載。IP Messenger原始碼的下載地址是http://www.ipmsg.org/,在網站的右上角,點選English page,網站轉換到英文介面,網站有英文版以及其它語言的版本,當然還有中文版的連結(http://www.azhi.net/IPMsg/),建議大家儘量下載原版的英文版原始碼,以利於學習。
2、IP Messenger原始碼的目錄及檔案
IP Messenger原始碼的目錄結構及檔案詳見列表1.1 IP Messenger原始碼主要的目錄及檔案:
列表1.1 IP Messenger原始碼主要的目錄及檔案
屬性 | 名稱 | 描述 |
目錄 | SRC | 工程檔案原始碼和INSTALL目錄 |
檔案 |
IPMSG.MAK | VC4及以前版本使用的工程檔案,用來指定如何建立一個工程,VC6把MAK檔案轉換成DSP檔案來處理 |
IPMSG.MDP | 字尾MDP(Microsoft DevStudio Project的簡稱)是老版本的專案檔案,相當於DSP檔案 | |
PROT-ENG.TXT | 英文版的協議描述 | |
PROTOCOL.TXT | 日文版的協議描述 | |
README.TXT | 英文版的README | |
README-J.TXT | 日文版的README |
IP Messenger的SRC目錄內容描述在列表1.2,SRC目錄及主要檔案。
屬性 | 名稱 | 描述 |
目錄 | INSTALL | 安裝程式原始碼目錄 |
檔案 | BLOWFISH.CPP | 加密演算法原始檔 |
BLOWFISH.H | 加密演算法標頭檔案 | |
BLOWFISH.H2 | 加密演算法隨機數標頭檔案 | |
CFG.CPP | 系統配置原始檔 | |
IPMSG.CPP | IPMSG的APP原始檔 | |
IPMSG.H | IPMSG標頭檔案 | |
LOGDLG.CPP | 日誌DLG原始檔 | |
LOGMNG.CPP | 日誌處理原始檔 | |
MAINWIN.CPP | IP Messenger主視窗原始檔 | |
MISCDLG.CPP | 訊息DLG,關於DLG,以及控制元件子類化等原始檔 | |
MSGMNG.CPP | Socket管理原始檔 | |
PLUGIN.CPP | Dll plugin載入原始檔 | |
RECVDLG.CPP | 接收訊息處理原始檔 | |
SENDDLG.CPP | 傳送訊息處理原始檔 | |
SETUPDLG.CPP | IP Messenger屬性配置原始檔 | |
SHARE.CPP | 檔案傳輸接收管理原始檔 | |
TAPP.CPP | 應用程式類原始檔 | |
TDLG.CPP | DLG類原始檔 | |
TLIST.CPP | 連結串列類原始檔 | |
TREGIST.CPP | 登錄檔操作類原始檔 | |
TWIN.CPP | 視窗類原始檔 | |
MSGSTR.H | 字串常量標頭檔案 | |
TLIB.H | 類、結構等標頭檔案 |
另外在SRC目錄下,還有一個INSTALL目錄,該目錄中的檔案是IP
Messenger安裝程式的原始碼,其主要檔案描述在列表1.3 INSTALL目錄主要檔案。
列表1.3 INSTALL目錄主要檔案
屬性 | 名稱 | 描述 |
檔案 | INSTALL.CPP | 安裝程式原始檔 |
INSTALL.H | 安裝程式標頭檔案 |
以上是IP Messenger的主要目錄及其主要原始檔的描述,通過列表我們可以清晰看出IP Messenger的功能分佈。在以下的詳細分析中,我們主要圍繞著這些原始檔而展開。
3、IP Messenger原始碼的工程轉換
由於IP
Messenger是使用以前版本的VC編寫的,因此在開啟工程檔案時,需要轉換該工程檔案為VC6版本的工程檔案。
雙擊開啟IPMSG.MDP檔案,系統提示轉換IPMSG.MAK工程配置檔案到VC6下的工程檔案,如下圖所示。
單擊 “是”按鈕,確定將工程轉換成VC6的工程。系統提示將MAK工程檔案轉換成DSP工程檔案,如下圖所示。
單擊“確定”按鈕,系統根據MAK檔案生成IPMSG.DSP檔案,以及VC6下的IPMSG.DSW檔案,另外系統還生成了IPMSG.NCB和IPMSG.OPT兩個檔案。
4、IP Messenger的工程配置
IP
Messenger的配置和目前VC6的工程配置有些不同,其安裝工程檔案和工程檔案在混合在一起,不像VC6工程檔案,不同的工程在不同的專案下,分別進行配置。
單擊“Build”選單,選擇“Set Active Configuration…”,彈出“Set Active Project
Configuration”對話方塊,如下圖所示。
IP
Messenger的工程配置有6個,分別是Release的英文、日文以及Debug的ipmsg工程和安裝工程。通過選擇不同的配置,可以編譯出不同的工程。根據需要,我們選擇ipmsg-Win32
Debug配置作為當前活動工程,此編譯配置可以編譯出Debug版的ipmsg。
單擊“Project”選單,選擇“Settings…”,彈出“Project
Settings”對話方塊,選擇“C/C++”標籤欄,如下圖所示。
可以看到,在“Preprocessor definition:”中,工程使用了“JAPANESE”巨集定義,也就是說,編譯後的Debug版的ipmsg是日文版。當然,可以根據需要,修改此巨集為“ENGLISH”,就可以編譯出Debug版的英文ipmsg。
5、系統概述完成上述操作之後,就可以使用VC++ 6 來編譯、除錯IP Messenger 。
當然,在以後的分析中,我們將分析ipmsg的安裝工程,那麼就應當選擇ipmsg-Win32
InstallerDbg配置作為當前活動工程,編譯出Debug版的安裝工程。
原文地址:http://blog.sina.com.cn/s/blog_4bf793ad0100lvi5.html