狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Solo即時聊天軟件(聊天、文件傳輸、UDP的p2p打洞)

admin
2014年1月27日 23:46 本文熱度 8923
[p]solo開源代碼下載地址:[br][url=http://weizengke.download.csdn.net/]http://weizengke.download.csdn.net/[/url] [/p]
[p]早就想寫個屬于自己的即時聊天軟件,現在總算擁有了!實現了文件(文件夾)傳輸、群聊、私聊、表情等。。[/p]
[p]  其他不多說,直接進入正題,把我的想法和感受和他家分享一下。[/p]
[p]  當然要做一個聊天軟件,首先要懂得網絡通信的基礎tcp\ip,udp之類的協議,還有socket編程。[/p]
[p]  其時間里兩臺電腦之間的通信是非常簡單的,對于udp是無連接的傳輸層協議,不像tcp那樣需要accept和connect什么的需要確保連接。但是udp又是不可靠的,但是相對來說,我覺得對于即時聊天軟件來說,使用udp還是足夠的。于是我采用了udp協議來貫穿我的軟件。當然一般的不加修飾的socket,只能實現同類網絡地址下的通信,對于一個不同內網的計算機,將無法進行通信,這樣也大大局限了我們軟件的使用范圍,所以我采用了udp下的nat穿透技術來突破這一障礙,具體理論我們參照這篇文章[url=http://xy.guet.edu.cn/xyzone/show/139]http://xy.guet.edu.cn/xyzone/show/139[/url]。。[/p]
[p]  先談談整體的思想吧,這個即時聊天軟件是以c/s構架的,服務器主要負責客戶的信息轉發,當然只是客戶本身的ip、各種端口(消息監聽,文件監聽)、用戶名之類的屬性,他不直接參與客戶之間的通訊,只有當客戶之間需要nat穿透的時候才會通過服務器通知需要通信的一方向另一方發送“打洞”請求,另外還處理客戶之間的登錄和下線事件的廣播,所以服務器的壓力會比較小。[/p]
[p]至于客戶端,我采用了傳統的聊天軟件的慣用方式,一個主對話框,顯示好友信息。出于減小難度,我只采用一個樹控件來控制這些好友信息,而沒有采用tab類型的控件,即使采用也是要花費一定的功夫去重寫這些控件類,才能滿足我們的要求。然后通過雙擊樹控件的子項來彈出聊天對話框,說到這里我不得不說一下c++的確是高處c一大籌,(封裝、繼承、多態)這是在是太帥了。創建這些聊天對話框時,將傳入對應的客戶ip、對話框指針、用戶名(號碼)等以用來正確識別。主程序運行就掛起一個消息監聽線程,來循環監聽從不同客戶發來的消息,然后進行不同的處理,所以使用了較多的宏,吧來自不同客戶的消息傳給不同的本地聊天對話框處理,所以剛才說的在創建聊天對話框的時候的參數就非常重要了,處理不好可能會出現差錯。諸多細節在這里還是比較難以細說。雖然采用了udp傳輸協議,但是我通過消息回執來確保消息發送成功,這個回執將決定是否進行打洞處理。而在文件傳輸功能上的實現,采用了tcp傳輸層協議(我也不知道為什么自己就選擇了這個,估計是但是第一感覺需要accept和connect),我是在主程序運行時就掛起一個文件監聽線程,當然這個監聽端口是在程序運行是,沒有登錄服務器之前就首先動態獲取的,我只是循環地查找沒有被占用的端口并綁定套接字。在有客戶發來文件傳送請求時,就創建一個文件接收和發送線程。感覺以上這些還是比較容易實現的。當然采用類的思想才會比較清晰,否則會比較亂。[/p]
[p]再講講其他一些小小細節,比如那個菜單的實現,如果采用對話框的默認菜單,我們都會覺得比較惡心,的確有點難看,所以我把對話框的菜單欄卻掉了,然后添加了on_wm_nchittest()消息,實現無菜單的客戶區拖動,然后重寫個button類來實現png圖片的裝飾,實現鼠標經過、懸停和按下的狀態(就像qq的最小化和關閉按鈕那樣的效果),當然,我使用的是vc6開發的,不能直接使用gdi+,所以配置了一下才行(具體方法自己網上一查就知道了)。然后那個對話框的主背景,也是通過把一張png圖片繪上去的,當然還要解決一些閃爍的問題,可以采用雙緩沖來解決。在做界面的時候,我深感自己缺乏藝術細胞,ps技術實在太爛,做的按鈕圖片比較難看,顏色搭配和漸變效果實在難以控制。而文件實現拖拽發送也比較簡單,增加個on_wm_dropfiles()消息函數,對話框拓展屬性勾上accept file就好了,剩下的就是處理路徑的問題了,還有多個文件的同時拖拽問題。還有就是那個表情是比較難以處理的一個模塊,當時就調試了我一個星期才解決,為了添加表情功能,我不得不放棄原來使用的edit控件(由于以前都只是使用edit),使用了richedit控件,使用該控件還是有很多細節要處理的,比如初始化才能使用啊什么的,當然為了實現表情的功能,我還是得重新寫richedit這個類,拓展一下。因為我是使用轉義碼來實現的,每一個表情對應一個轉義碼,就像c語言中\n代表換行一樣。重寫的類中要實現,文本的添加和當文本改變時要處理一些諸如是否寫入了轉義碼,超鏈接等等,至于那個表情布,只是一張小小的銀白色的圖片為底,然后再圖片上分出很多個小小的矩形來容納一個個小小的表情按鈕,很多按鈕吧,沒錯!每個小小的表情都是覆蓋在按鈕上的,同樣要實現鼠標經過懸停和按下的事件,還得畫一下那個藍色的邊框。。總之這個表情功能的添加,我耗費較多的時間了,明白一點:微軟提供的控件都是令我們不夠滿意的,我們得自己重寫這些控件類,也就是繼承他!!!!(記得保存下來以后再用哦)。。[/p]
[p]講到這里,這個即時聊天軟件的主要思想也介紹差不多了。。提幾點軟件開發的體會,要注意代碼的編寫習慣,不要寫那么多全局變量和外部變量(不到比不得以的話),注意內存的釋放防止泄露,調試能力很重要(否則很多時候看卡你怎么不知所措)。[/p]
[p]謝謝您的指點。[/p]

該文章在 2014/1/27 23:46:50 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved