在個人《服務器端編程心得》這個系列的第一篇至第六篇都是講了一些零散的不成體系的網絡編程細節。今天,在這篇文章中,我將介紹一款我自主開發的即時通信軟件flamingo(中文:火烈鳥),並開源其服務器和pc客戶端代碼。以此來對前幾篇文章中說到的理論進行實踐。mysql
代碼在github和csdn.net上各上傳了一份:linux
github地址:https://github.com/baloonwj/flamingogit
csdn地址:github
服務器端代碼地址:http://download.csdn.net/detail/analogous_love/9805797sql
pc客戶端代碼:http://download.csdn.net/detail/analogous_love/9805795數據庫
csdn上代碼可能不是最新的,可是github上的代碼是不斷維護的,包括一些新功能的增長和bug的修復。若是你想關注flamingo的最新功能,請關注github上的更新。若是你只想研究下網絡通訊程序的基本原理和編碼技巧,csdn上的代碼就足夠了。編程
目前即時通信軟件實現了以下功能(這裏只列舉網絡相關的功能,其餘客戶端已經實現的功能不統計在列,請自行發現):服務器
下面是一些截圖:網絡
客戶端還有不少細節功能,好比頭像有三種顯示模式、好友上線動畫、聊天記錄、框架
聊天自動回覆功能等,有興趣的同窗能夠本身探索嘗試一下吧,這裏就不截圖了。
下面介紹一下服務器代碼和pc客戶端代碼的編譯與運行環境:
flamingo服務器端代碼使用cmake + makefile編譯,使用了純C++11開發,運行於linux系統下(個人系統是CentOS7.0),爲了支持C++11,你的gcc版本至少要大於4.7,個人版本是4.8.5。另外,使用了mysql數據庫,個人數據庫版本是5.7.17。服務器代碼不只是一款即時通信軟件的服務器代碼,同時也是一款通用的C++11服務器框架。
服務器代碼使用方法:
編譯方法:
1. 進入程序目錄,輸入cmake . (注意有一個點號,表示當前目錄)
2. 沒有錯誤,輸入make
3.最終會產生兩個可執行程序,mychatserver和myfilesever。編譯完成
部署方法:
簡單說明:mysql數據庫的用戶名爲root,密碼爲空,請根據你本身的須要設置相應的用戶名和密碼(目前寫死在程序中)。mychatserver是聊天服務器,myfileserver是文件服務器,文件服務器負責上傳和下載聊天中發送的文件,myimgserver負責上傳和下載聊天中的圖片。三個服務相互獨立,互不影響。聊天服務器監聽端口是20000,文件服務器端口是20001,圖片服務器端口號是20002,這三個端口供客戶端鏈接,其中聊天端口和客戶端是長鏈接,文件端口和圖片可選擇長鏈接或短鏈接。
第一次運行mychatserver時,若是能順利連上mysql,mychatserver會自動檢測是否存在名爲myim的數據庫,若是不存在則建立,並新建三張信息表,分別是用戶信息表:t_user, 好友關係表t_user_relationship和聊天消息記錄表t_chatmsg。第一次啓動文件服務器時會建立filecache目錄,這個目錄用來存儲聊天中的聊天圖片和離線文件以及客戶端升級包。
爲了方便查看代碼,我用Visual Studio來管理代碼,可以使用VS打開myserver.sln查看和管理代碼。(VS版本必須是VS2013或以上版本)
客戶端代碼使用方法:
編譯:
1.用VS2013打開程序目錄下的:Flamingo.sln,你可使用其餘的VS版本,可是至少不低於VS2013,由於客戶端代碼也使用了大量C++11語法和庫,VS2013及以上版本才能較好的支持C++11的語法。
2. 打開的解決方案包括三個項目:Flamingo是即時通信主程序,CatchScreen是聊天中使用的截圖工具,iUpdateAuto是升級功能中用到的解壓工具。
3. 用VS2013編譯整個解決方法便可,編譯成功之後將在Bin目錄下生成對應的程序。啓動Flamingo.exe註冊一個帳號就能夠開始使用flamingo了。
若是你暫時不想研究服務器代碼,但又想使用客戶端,你能夠鏈接個人測試服務器,測試服務器地址是:
聊天服務器地址:120.55.94.78 端口號:20000
文件服務器地址:120.55.94.78 端口號:20001
圖片服務器地址:120.55.94.78 端口號:20002
你能夠在登陸界面的網絡設置裏面進行設置(登陸界面右上角最小化按鈕左邊的一個按鈕)。
這篇文章暫且就這樣了吧,若是有您對個人程序有任何意見或者建議,或者有不錯的想法歡迎與我交流或者給我留言(QQ:906106643).。代碼中也有些「拿來主義」,另外程序中使用的圖片和圖標來源於網絡,僅供用於學習,請勿用於商業用途,若是不當心侵犯了您的版權,請聯繫我。
接下來的幾篇文章,我會詳細地介紹這款即時通信軟件服務器端與客戶端代碼的框架結構和實現細節。敬請期待。
固然,我保證,我會持續維護flamingo,讓這款軟件愈來愈好,歡迎關注github上的更新:https://github.com/baloonwj/flamingo。若是你有任何問題能夠在博客或者github問題頁面留言(https://github.com/baloonwj/flamingo/issues),我看到會盡可能回覆你的。
歡迎加入羣:49114021,進行技術討論與交流。