2010年6月13日 星期日

簡易多人聊天程式 - by Neil

【軟體名稱】:簡易多人聊天程式
【軟體性質】:免費軟體
【軟體語言】:繁體中文
【編譯環境】:Embarcadero C++ Builder 2010
【軟體版本】:v1.5.1
【最後更新】:2010.06.28



程式功能:

.顧名思義當然就是可以很多人連線聊天啦...每個人可以建立聊天室、加入聊天室
.如果室長突然斷線或離線時,會自動給最先進入聊天室的人成為室長,不會因為室長離線而大家都斷線
.只有室長擁有踢人權限
.可傳送悄悄話、呼叫功能(Beep)
.如果要改呼叫聲音,把你要的聲音檔檔名改成「beep.wav」,放在與程式同目錄下即可
.傳遞的對話內容經過AES加密演算法,提高在資訊網路傳送時安全性
.傳檔功能(可能有BUG,不過還是可以試看看啦...)
.傳送每一檔案大小限制4GB,如果超過的話會爆炸


p.s 就如同程式標題「簡易」多人聊天程式,所以功能很陽春,小弟也沒那種動力,立志改成比MSN強,或者接近MSN的功能...(又沒錢賺)。
因為這是隨建即連的類型,而Windows的MSN是有好幾台伺服器24小時不關機,在服務MSN的用戶的方式。所以我的程式不可能改成有什麼加入好友、名單、誰誰誰上線或離線等其他功能。

載點:

這真是絞盡我腦汁,花我不少時間的程式阿~
深深體會到網路程式是個很複雜的程式...
主要是牽涉到多人連線的問題,比起一對一對話還要麻煩很多
可能會掉封包、封包相撞、傳送訊息封包可能會與其他作用的封包搞混等等,很多問題
在找bug是花最多的時間
也是最頭大的事情...因為有太多時候很難找到是什麼原因出錯
在寫這程式時有好幾度寫到想放棄說...一路遇到很難搞的問題,差點不知道怎解決
不過最後還是完成了
雖然是用C++ Builder寫的視窗程式,但我沒有用他內建的網路元件(因為不會用...)
都完全用winsock library一步步coding出來,建立連線的
因家裡不像學校網咖有這麼多台電腦可以測試
所以有可能在很多人聊天時出問題吧?
不過小弟目前測試三台電腦通訊是沒發現大問題啦~所以應該是還好才對...

這程式稍微能值得一提的除了可以支援多人聊天之外,大概就是AES加密演算法跟傳檔功能了

簡單的說AES這是美國國家在某年,號召全世界各地密碼學高手參加的一個競賽,經過五年的競賽,挑選出一組參賽者最好的加密演算法,於是在2002年5月成為有效的高級加密標準,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。
想瞭解這技術可以點我進入維基百科查看,或google搜尋「AES」,中文英文PPT很多
嫌太複雜?都英文看不懂?來來~這裡有國外做的flash動畫,告訴你加密的流程XD→點我看動畫
雖然說有動畫...不過要看懂的話,自己也要有些底子才行...
Neil我當初再大三時,修了一門好像叫「網路安全」的選修課
其中的作業就是要我們寫AES加密,當初我自己找了一堆資料,動畫看好幾遍,才大概知道怎麼寫
於是就想把我在大三寫出來的加密用上聊天程式裡~

傳檔的部份.....總算搞出可以work的傳檔功能了...
會卡很久的原因就是,在傳的過程中,萬一又在聊天對話,或者有兩個以上的檔案在傳時
訊息會相碰撞,或者是訊息來的時間間隔極短,電腦來不及處理下一筆訊息
就導致沒接收到訊息...結果程式當掉...
這是主要的大問題,當然還有其他「沒沒角角」的問題
所以不斷地想辦法解決這種問題,自己測試大致上是沒問題啦...
小弟在學校測試,家裡測試傳檔,結果速度都比M$的MSN的傳檔還快
如果在很多人的情況下,又有很多檔案在傳,很可能會當掉吧...
我猜的啦,沒實際測試過,可能不會當掉也說不定...
我沒那麼多台電腦可以測..所以...就小心點用吧XD
盡量不要一次傳一堆檔案...不怕當機的可以試看看...=.=
雖然我簡單測試過是沒當機啦..只是整體傳檔速度會慢很多

有幾個小bug,目前還沒找到好方法解決,但也盡量降低跟避免bug發生機率了
那個Bug就是在傳檔的同時,如果還邊聊天的話,傳檔速度會停頓一下才繼續傳
另一個就是當很多人在互傳檔案時,整體速度會變得很慢
如果你聊天所說的話,上一段話跟下一段話時間間隔如果太短(約0.5秒內),可能對方沒收到...
因為有傳檔跟聊天的功能緣故,傳送的資料可能剛好同時發出,或同時接收而來不及處理
發生封包碰撞,出現掉封包的情形,所以會沒收到資料
於是我用時間延遲的方式,當又傳檔又聊天時,分別會延遲一點時間
讓傳檔的資料跟聊天的資料錯開,減少發生同時送出跟同時接收的情況
可是還是有很小很小的機率會發生沒收到聊天的訊息...或者是傳送的訊息前後時間顛倒
這就要看當時雙方連線品質(ping值)了...
如果要盡量避免對方沒收到訊息,就盡量不要在0.5秒內傳送兩次以上的對話了

5 則留言:

  1. 請問這篇的上半部可以借我轉嗎(圖片+程式功能介紹)

    此為我的網站http://0rz.tw/llr1d

    回覆刪除
  2. 只要註明出處,歡迎轉貼

    回覆刪除
  3. 可以試試把網路連線的部份交給script language做,會有意想不到的效果!!

    回覆刪除
  4. 想請教關於傳檔部分有沒有參考資料或範例呢?

    最近在練習寫類似的程式 文字方面已沒問題 傳檔的部分一直不知道該如何下手

    爬文爬完還是毫無頭緒

    版主能否指點一下或者是說可以的話能寫篇教學文呢?

    回覆刪除
  5. 公司區域網路內無法get到ip~~~= =''

    回覆刪除