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版的安裝工程。