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。