簡易聊天室

最近都在趕論文,總覺得網頁程式能力有點生疏
想說就作個小品程式來試試身手
這次作的系統是簡易版的聊天室
這次主要是使用 PageMethods 來實現 Ajax 非同步更新
裡面的 Default.aspx 為 VS.Net 新增專案的預設網頁,而 Default2.aspx 則是另外拉出來的空白網頁加文字方塊之類的

那簡單介紹一下我的程式吧,他會進行限制你多久才能跟 Server 要一次資料,但是是使用 JavaScript 作限制的,所以只防君子不防小人
而發言也有限制,但同上
所以這系統建議只在小圈圈裡使用,不建議架起來成一個大型聊天室給一般大眾
(如果真要這樣玩可能得先自己改程式碼了)

再來上面會丟ip出去,但是 ip 演算法只是我隨便亂拼湊出來的【可逆】演算法
所以如果建議自己去改寫其中的演算法
否則當有人成功推算出上面的規則後,每個人都將裸露在那個人眼前了!

這聊天室完全不使用資料庫,他的資料儲存是透過 Application ,所以會有更改 web.config 後資料會不見的特性,然後太久閒置沒人連上去也會有資料不見的特性
然後因為他一樣是使用流水號來判斷是否該筆聊天訊息已丟過,所以有可能會發生溢位的問題,但是那要相當大量的資料才有機會(我的流水號是透過 ulong 型態來儲存,他相當於 UInt64,可以儲放的值範圍為 0 ~ 18,446,744,073,709,551,615 ,我想聊天訊息要丟到那麼多應該需相當的人氣)

然後我剛剛才想起來我忘了限制名稱和訊息必填才能丟,所以有需使用的需自己撰寫相關的限制原始碼

最後我想就針對我今天花比較多時間來撰寫的 IP 相關函數作介紹:
using System;
using System.Text;

namespace ChatRooms.Common
{
    public class IP
    {
        const string str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        const int multiply = 113;
        public static string ToString(long ip)
        {
            UInt64 ip2 = Convert.ToUInt64(ip) * multiply;
            UInt64 strlength = Convert.ToUInt64(str.Length);
            StringBuilder sb = new StringBuilder();
            while (ip2 > strlength)
            {
                sb.Append(str[Convert.ToInt32(ip2 % strlength)]);
                ip2 = ip2 / strlength;
            }
            sb.Append(str[Convert.ToInt32(ip2)]);
            return sb.ToString();
        }
    }
}
其實一開始不只這些,我曾想過使用各種加密演算法之類的,但是發覺這樣出來的 ip 字串將會很冗長,並不是我想要的結果(一個ip就佔整個螢幕快一半的畫面,我想沒有人想要這樣吧?)
最後我就回歸最原始 - 字串處理,透過先乘以一個足夠大的數後就會得到另一個還蠻大的數,之後再透過 while 迴圈將 ip 的數值取代成字串,這樣就會得到像 vNZNnjm 這樣的 IP 文字(有興趣可以自己反解該文字回去XD),當然理解了這個的運作原理後,完全可以透過修改這演算法得出一個不易被猜到ip的演算法。

要下載請先看我
本程式雖然放在網路上但並不表示我放棄該程式的著作權,請勿進行任何交易或修改程式碼後販賣!
另如有自行修改後發佈的請留言通知,我們亦可一同討論,如不同意請勿下載,感謝你的合作!
我同意

留言

這個網誌中的熱門文章

DB 資料庫呈現復原中

Outlook 刪除大量重覆信件

[VB.Net] If vs IIf ,兩者的差異