Liên hệ       
       
Thành viên
 
 
 
Thăm dò ý kiến
Cảm nhận về giao diện mới


Tạo ứng dụng Chat Trên mạng bằng ASP.NET 2.0
  Trung bình: 2.3 (Đã có 14 lượt đánh giá)
   20/12/2007 03:24 PM

Lần trước, mình đã giới thiệu cách tạo ứng dụng Chat bằng Java. Lần này, ứng dụng chat mình giới thiệu sẽ viết bằng ASP.NET 2.0. Tuy nhiên quy mô của ứng dụng này quá nhỏ, vì vậy mình sẽ ko dùng CSDL mà thay vào đó sẽ dùng mảng để lưu dữ liệu. 

Dưới đây là giao diện của khung chat. Mình ko để hiển thị các kênh chat, vì vậy mà khi đăng nhập vào phòng chat để kiểm tra hoạt động của ứng dụng, các bạn nên nhớ các Channel chat trùng tên nhau.

Trở lại với ứng dụng, như đã nói từ đầu, mình sẽ dùng mảng để lưu các đoạn chat. ở đây, mình sẽ chỉ lưu tối đa là 200 dòng. nếu quá 200 dòng thì mình sẽ xóa đi 10 dòng đầu tiên. Tất cả thao tác với dữ liệu mình viết trong lớp Chat.cs. nếu mà kết nối với CSDL thì lớp này sẽ không cần thiết nữa. nội dung của lớp đó như sau:

namespace SimpleChatroom.pageChatRoom
{
    public class Chat
    {
        static protected ArrayList pArray = new ArrayList();

        /// <summary>
        /// Chèn dữ liệu và kiểm tra xem có vượt quá 200 dòng ko, nếu vượt qua thì xóa 10 dòng đầu.
        /// </summary>
        /// <param name="sDealer"></param>
        /// <param name="sUser"></param>
        /// <param name="sMsg"></param>
        static public void AddMessage(string sDealer, string sUser, string sMsg)
        {
            string sAddText = sDealer + "~" + sUser + "~" + sMsg;
            pArray.Add(sAddText);

            if (pArray.Count > 200)
            {
                pArray.RemoveRange(0, 10);
            }
        }

        /// <summary>
        /// Lấy tất cả dữ liệu.
        /// </summary>
        /// <param name="sDealer"></param>
        /// <returns></returns>
        static public string GetAllMessages(string sDealer)
        {
            string sResponse = "";

            for (int i = 0; i < pArray.Count; i++)
            {
                sResponse = sResponse + FormatChat(pArray[i].ToString(), sDealer);
            }

            return (sResponse);
        }

        /// <summary>
        /// Định dạng chuỗi
        /// </summary>
        /// <param name="sLine"></param>
        /// <param name="sDealer"></param>
        /// <returns></returns>
        static private string FormatChat(string sLine, string sDealer)
        {
            int iFirst = sLine.IndexOf("~");
            int iLast = sLine.LastIndexOf("~");

            string sDeal = sLine.Substring(0, iFirst);
            if (sDeal != sDealer)
                return ("");

            string sUser = sLine.Substring(iFirst + 1, iLast - (iFirst + 1));

            string sMsg = sLine.Substring(iLast + 1);

            string sRet = "<STRONG>" + sUser + ": </STRONG>" + sMsg + "<BR>";

            return (sRet);
        }
    }
}

Bạn nhớ chú ý tên của Namespace nhé vì nó có liên quan đến việc gọi hàm sau này.

trước khi vào phòng Chat, ta sẽ phải qua một bước đăng nhập. sau đó mới chuyển đến kênh chat.

Response.Redirect("AppChat.aspx?Channel=" + txt_Channel.Text + "&User=" + txt_User.Text);

có 2 tham số đi kèm là Channel và User để biểu thị kênh chat và tên người chat.

Khi được chuyển đến kênh chat, ta sẽ kiểm tra xem đã có kênh chat nào chưa trong hàm Page_Load().

protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
                if (Request.Params["Channel"] != null)
                    Session["ChatChannel"] = Request.Params["Channel"].ToString();
                else
                    Session["ChatChannel"] = "1";
            }
        }

sau đó, ta chỉ cần viết lệnh xử lý sự kiện click và xong.

        protected void btnSend_Click(object sender, EventArgs e)
        {
            string sChannel = "";
            string sUser = "";

            if (Request.Params["Channel"] != null)
                sChannel = Request.Params["Channel"].ToString();
            else
                sChannel = "1";

            if (Request.Params["User"] != null)
                sUser = Request.Params["User"].ToString();
            else
            {
                Random pRan = new Random();
                int iNum = pRan.Next(9);
                sUser = "Annonymouse" + iNum;
            }

            if (txtToSend.Text.Length > 0)
            {
                pageChatRoom.Chat.AddMessage(sChannel, sUser, txtToSend.Text);
                txtToSend.Text = "";
            }

        }
    }

Bạn có thể download mã nguồn tại đây.


Gửi bởi: ngocdv
Lượt xem: 9330
 
vuong 24/12/07 01:09 PM
hoi tai sao down ma nguon ve ko the chay.

ngocdv 24/12/07 02:14 PM
Mình đã kiểm tra lại mã nguồn và thấy nó vẫn chạy tốt. Hãy chú ý: Ứng dụng này mình viết trên VS 2005.

Trương QUốc Bình 25/12/07 09:51 AM
Bai viết trên rất hay và hữu ích cho tôi. Giá như tôi được các sư phụ chỉ cặn kẽ thêm về xây dựng CSDL của bài này thế nào thì tốt quá. Đây là đề tài thi học kỳ mà tôi đang xây dựng. Xin được nhân lời chỉ dẫn. chân thành cảm ơn.

Hồ Anh Hùng 26/12/07 04:21 PM
Cũng khá hay, trước tôi cũng có làm niên luận chủ đề này nhưng là với asp . Nay bài này làm tôi hiểu hơn . Thanks .

ngocdv 28/12/07 08:54 AM
@Bình: Bạn đang làm đề tài thi học kỳ àh? Bạn hãy vào trang http://www.chatstat.com để tham khảo về ứng dụng "chat" một cách chi tiết và chuyên nghiệp hơn. Chúc bạn thành công!

Trường Thọ 06/01/08 05:37 PM
    hi!!!
  Cho em hoi tai sao ham GetAllMessage ko thay su dung trong bai viet.Em mo ma nguon ra cung ko thay luon.Mong anh tra loi som dum em.Em dang can su dung chuong trinh nay.

Nguyễn Cảnh 17/01/08 11:22 PM
Không chạy được là sao nhỉ? Nó báo không thể config được với IIS mà trong khi đõ đã đưa nó vào wwwroot và create trong IIS?

xuanthe2002 21/01/08 11:13 AM
bài viết rất hay và thâu tóm nội dung, cho mình hỏi nếu mình muốn Kết nối CSDL băng lớp thì viết nhw thế nào, trong lớp mình viết có thể thên xoá, sữa bằng cách viết các hàm trong C#, khi sử dụng trong Trang Default thì gọi nó ra sao. Nếu biết xin chỉ giùm, Thank!

Lê Nguyệt Thu 22/01/08 07:54 PM
bạn ơi mình đang cần code chương trình chat băng java. bạn có thể gửi cho mình để mình tham khảo được ko? Cảm ơn bạn rất nhiều !

ngocdv 23/01/08 09:07 AM
Bài viết về Ứng dụng Chat bằng Java bạn có thể vào http://zensoft.vn/ShowArticle.aspx?ID=1041 để xem và download mã nguồn.

nguoidaukho 23/01/08 05:56 PM
hay that la tuyet nha!Chac tac gia thuoc hang cao thu ghe gom lam day!

nguoidaukho 23/01/08 06:04 PM
Minh moi nhap mon ASP.NET 2.0 hà~Trang nay wá tuyệt luôn!Mình cung dang làm do an ve web mai mot minh co thac mac minh hoi ban dc ko ban NGOCDV!Ban gioi thiet do!

nguoidaukho 23/01/08 06:06 PM
Minh dang nhap mon ASP.NET 2.0 !minh cung dang chuan bi lam mot do an ve web,mai mot minh ko hieu cho nao minh co the hoi ban dc ko vay ban NGOCDV!Cam on ban truoc nha!

Peo Peo 04/04/08 08:33 AM
Rất cảm ơn tác giả của bài viết. Nó thật có ích và thú vị. Tiện đây tui muốn hỏi "đa ngôn ngữ cho trang web trong asp.net 2.0" có những giải pháp nào? Bạn có thể giới thiệu cho tui một trong những giải pháp đó được không?

Thanh Nhã 04/04/08 04:45 PM
Vấn đề rất hay và thực tế. Vậy xin bạn cho mình biết với: Cơ chế nào trong ASP.NET 2.0 đọc thông điệp CHAT của người khác hiện lên màn hình của mình. Trong VB2005 có thể dùng công cụ TIME đọc để kiểm tra trong khoảng thời gian nào đó, còn trong ASP.NET 2.0 thì nó làm cách nào. Xin chỉ giáo. Cám ơn bạn !...

ngocdv 06/04/08 09:35 PM
Mình cũng đa giới thiệu một bài viết về website đa ngôn ngữ rồi. bạn có thể tham khảo tại http://zensoft.vn/ShowArticle.aspx?ID=3005.
Có 2 đối tượng trong Dot Net giúp ta thực hiện:

- ResourceManager system.Resources.ResourceManager)

- CultureInfo (System.Globalization.CultureInfo)

khibuonlamsaoquen 22/04/08 07:59 AM
hiiiiiiiiiiiiilam quen nhe

hongle 28/05/08 11:00 AM
sao minh down ve ma ko chay vay? bao loi"Error 1 It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level.  This error can be caused by a virtual directory not being configured as an application in IIS. D:\Subjects\ASP.net\SimpleChatroom\SimpleChatroom\Web.config 21" chi minh giup cach khac phuc voi! thanks

sondt 28/05/08 11:20 AM
@HongLe: ví dụ chạy tốt mà, tôi nghĩ bạn đang dùng VS 2001 nên bị lỗi đó, ví dụ này được thực hiện trên VS 2005.

dolinhchi 23/08/08 12:02 PM
cac ban ak trang nay zui hok lam wuen nha

QuanLV 29/08/08 04:20 PM
Giá như bạn có cách nào không refresh trang thì rất tuyệt

hoanganh9 09/12/08 11:28 PM
Bài này hay Wa cảm ơn NgocDV nhe!
gửi QuanLV: Để refresh bạn có thể dùng AJAX để mình thi xong minh sẽ gửi cho.

do linh chi 18/01/09 02:42 PM
trang nay hay tuyet cu meo` hjhj```

minh 09/03/09 08:26 AM
hello hj`.ai muốn làm wen add nick mik naz kuka9x mik la boy  thank naz

minhhai 10/03/09 04:09 PM
Chương trình rất hay. nhưng sao mình chát thì máy bên kia ko nhận dc vậy. lý do sao bạn ha. và nếu làm bằng CSDL thì làm Như thế nào? xin chỉ giáo với. Thanks

gàcon96 17/08/09 01:32 PM
Sao em nhìn giống AS thế,hoa cả mắt hjc

seekill 20/11/09 07:39 PM
Bài này lấy bên codeproject.com của 1 tác giả người Mỹ mà chả ghi rõ nguồn gì cả! Mong bác lần sau mà copy và dịch lại của người khác thì nên ghi nguồn rõ ràng. Dù sao cũng cảm ơn đã chia sẻ cho mọi người!

Chiennb 23/03/10 03:23 PM
Những ai chưa chạy được thì vào đây để download nhé: http://www.codeproject.com/KB/applications/SimpleChat.aspx

jockey 14/06/10 10:47 AM
Đúng vậy, chúng ta nên tôn trọng quyền tác giả



NHẬN XÉT CỦA BẠN
Trung bình: 2.3   
Kiểu gõ: Off Telex VNI VIQR Tổng hợp (Telex, Vni, Viqr)
Họ Tên:
Hòm thư:
Nội Dung:
Số ký tự còn lại: 3500