ASP.NET 使用Application实现聊天室(超详细,先收藏)

思路与技术

本实例添加了私聊功能,有关Application对象的应用如下。

Application对象是建立在应用程序级上并为所有客户提供共享信息的对象。该对象所存储的信息可以被多个客户使用,并且在整个Web应用程序运行期间持久地保存。一个客户停止了自己的应用程序,释放了Application对象的共享信息后,并不影响其他客户应用。

1.变量定义
Application对象的主要功能就是为Web应用程序提供全局变量。它是由用户根据需要自行定义的。其语法格式如下:

Application["变量名"]=表达式;

2.信息读取
应用程序中可以通过给定的变量名读取指定变量的值。其语法格式如下:

变量名=Application["变量名"];

3.Application对象的Lock方法
由于多个用户可以共享Application对象,因此对共享资源使用锁定是必要的。用户可使用该对象的Lock方法禁止其他用户修改Applicaation对象的属性,以确保在同一时刻只有一个客户可以修改和存取Applicaation对象的属性,该方法称为“加锁”。其语法格式如下:

Application.Lock( );

4.Application对象的Unlock方法
如果将共享区加锁后,迟迟不给开锁,可能会产生严重后果。用户可以使用该对象的Unlock方法来解除锁定。这样可以保证在没有程序访问的情况下允许有一个客户可以使用Application对象的共享区,该方法称为“解锁”。其语法格式如下:

Application.Unlock( );

5.Application对象的事件
Applicaation对象具有两个事件:Application_Start事件和Application_End事件。这两个事件的处理程序都放在当前解决方案根目录下的Global.asax文件中。

Application_Start事件是在首次创建新的会话之前发生。当Web服务器启用并允许客户访问后,第一位连入网站的Web用户将触发该事件。在该事件下主要是对一些全局变量做初始化工作。

Application_End事件是在用户退出Web应用程序且在所有的会话都过期后发生。在该事件下主要是对一些关键的Application对象全局变量做适当处理,例如重要的数据存盘等。

下面重点讲解实现私聊与公聊的区别。

在开发聊天室时,实现公聊和私聊的相同点是:都需要保存4项内容,即发送时间、发送者、接收者和聊天内容。发送时间可以直接用系统时间DateTime.Now来表示,发送者可以从Session[“user”]中获取。

其不同点如下。

实现公聊可将这4项内容保存在同一个Application对象中,保存的格式为:发送者、接收者、发送内容、发送时间,并将多条内容以“,”隔开。在显示界面中,直接从Application对象中将保存的内容按顺序一条一条读出来。

而实现私聊时,需要将这4项内容分别保存在4个不同的Application对象中,并确保保存的顺序一致,例如“A对B说你好!”,如果发送者A在Application对象的第一位保存,则其发送内容“你好!”、发送时间“系统时间”、接收者“B”都应保存在相应的Application对象的第一位。在显示聊天内容时,将保存聊天信息的4个Application对象分别存放在4个数组中。对于接收者来说,应将Session[“user”]的值与接收者数组中的值一一对比,如果相同,则记下接收者在数组中的位置,分别将存在该位置中的发送者、发送时间、聊天内容取出来,显示在界面中。

开发步骤

(1)新建一个网站,命名为Ex11_11,默认主页名为Default.aspx。

(2)在页Default.aspx中添加1个Table表格,用来布局页面,在Table表格中添加1个TextBox控件,用户可以在此控件输入用户名,在该表格中再添加1个Button控件,用户通过单击该控件进入聊天室。

(3)创建1个新页left.aspx,用来显示在线用户的列表。在该页中添加1个Table表格,用来布局页面,在Table表格上添加1个ListBox控件用来显示在线用户名。

(4)创建1个新页right.aspx,用来显示聊天信息。在该页中添加1个Table表格,布局页面。在Table表格中添1个TextBox控件,用于显示公聊信息。

(5)创建1个新页Bottom.aspx,添加聊天信息。在该页中添加1个Table表格,用来布局页面,在Table表格添加1个TextBox控件,用户可以在此控件添加聊天信息,再添加2个Button按钮控件,分别用来发送聊天信息和退出聊天室。

(6)主要程序代码。

由于该聊天室是应用Application对象实现的,当服务器重新启动后,Application对象中的数据将全部清空,因此在应用程序启动时,应对数据进行初始化操作,其主要代码如下:

void Application_Start(object sender, EventArgs e) 

   {
   

      // 在应用程序启动时运行的代码

      //建立用户列表

      string user="";//用户列表

      Application["user"] = user;

      Application["userNum"] = 0;

      string chats = "";//聊天记录

      Application["chats"] = chats;

      //当前的聊天记录数

      Application["current"] = 0;

   }

在添加聊天信息页面Bottom.aspx中,当用户输入聊天信息后,单击【我要发言】按钮,在【我要发言】按钮的Click事件下将要发言的信息、发言人、发言时间保存在Application对象中,其代码如下:

protected void  Button1_Click(object sender, EventArgs e)

       {
   

          Application.Lock( );

          string strTxt = TextBox2.Text.ToString( );

          int intChatNum = int.Parse(Application["chatnum"].ToString ( ));

          //处理公共聊天内容

          int intcurrent = int.Parse(Application["current"].ToString( ));

          if (intcurrent == 0 || intcurrent >40)

          {
   

            intcurrent = 0;

            Application["chats"] =Session["user"].ToString( ) + "对" + DropDownList1.SelectedValue.ToString( ) + "说:" + strTxt.ToString( )+"("+ DateTime.Now.ToString( )+")" ;

           }

           else

           {
   

               Application["chats"] = Application["chats"].ToString( ) + "," + Session["user"].ToString( ) + "对" + Drop DownList1. SelectedValue.ToString( ) + "说:" + strTxt.ToString( ) + "(" + DateTime.Now.ToString( ) + ")";

                 

            }

            intcurrent +=1;

            object obj = intcurrent;

            Application["current"] = obj;

            Application.UnLock( );

           //刷新聊天页面

           Response.Write("<script language=javascript>");

           Response.Write("this.parent.right.location.reload( )");

           Response.Write("</script>");

 

       }

在显示聊天信息页面right.aspx加载时,从Application对象中读取保存的聊天信息,将所有的聊天记录显示在页面中。其代码如下:

 protected void Page_Load(object sender, EventArgs e)

   {
   

      Application.Lock( );

      string OwnerName=Session["user"].ToString( );

      if (!IsPostBack)

      {
    

         //公聊

         int intcurrent = int.Parse(Application["current"].ToString( ));

         string strchat = Application["chats"].ToString( );

         string[] strchats = strchat.Split(',');

         for (int i = (strchats.Length - 1); i >= 0; i--)

         {
   

            if  (intcurrent == 0)

            {
   

               TextBox1.Text =strchats[i].ToString( );

            }

            else

            {
    

               TextBox1.Text = TextBox1.Text + "\n" + strchats[i].ToString( );

            }

         }

      }

      Application.UnLock( );

   }

(7)在聊天信息页right.aspx中,再添加1个TextBox控件,用来显示私聊信息;在添加聊天信息页Bottom.aspx中,再添加1个CheckBox控件,用来区分聊天信息为私聊还是公聊。

(8)主要程序代码。

为了实现私聊功能,在上述基础上修改Global.axax文件,在文件中加入如下的代码:

void Application_Start(object sender, EventArgs e) 

   {
   

      // 在应用程序启动时运行的代码

      //建立用户列表

      string user="";//用户列表

      Application["user"] = user;

      Application["userNum"] = 0;

 

      string chats = "";//聊天记录  

      Application["chats"] = chats;

      //当前的聊天记录数

      Application["current"] = 0;

 

      string receive = "";//接受列表

      Application["receive"] = receive;

      string Owner = "";//发送列表

      Application["Owner"] = Owner;

      string chat = "";//私聊内容列表

      Application["chat"] = chat;

      Application["chatnum"] = 0; 
  • 32
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值