一个简单聊天室实例

来源:互联网 发布:dot.js和vue.js 编辑:程序博客网 时间:2024/06/04 19:20

这个简单的聊天室没有与数据库连接,但是它实现了一个聊天室的基本功能,如登录验证、在线提示、在线人数统计、聊天记录等,主要用到表单、request对象、response对象、application对象、session对象、cookie对象、server对象等。

1.打开VS2005,新建一个项目命名为ChartRoomTest

右键单击解决方案选择“添加新项”菜单命令,在弹出的对话框中选择“全局应用程序类”,单击“添加”按钮

双击打开Global.asax文件,添加如下代码

在 Application_Start事件中添加代码:

        string[] TempTalk = new string[10];//用于存储聊天室的前十个聊天记录
        Application["TalkConten
t"] = TempTalk;
        Application["TalkId"] = 0;//存储聊天室记录的总数
        Application["UserCount"] = 0;//存储目前的在线人数
  

在Session_Start中添加:   

        Session.Timeout = 30;//会话的失效时间为30分钟
        Session["UName"] = "";//登陆的名字
        int uCount = Int32.Parse(Application["UserCount"].ToString());
        uCount += 1;
        Application["UserCount"] = uCount;//在线人数
    在 Session_End中添加

       int uCount = Int32.Parse(Application["UserCount"].ToString());
        uCount = uCount - 1;
        Application["UserCount"] = uCount;

2.聊天室的登陆

进入聊天室后需要一个用于聊天的用户名,这个就需要通过登陆功能来完成

将default.aspx重命名为Login.aspx,切换到设计视图,布局控件如图:


其中:    登录名 id属性值为NameTxt 。 密码id属性值为Pwdtxt

登陆事件:

protected void btnLogin_Click(object sender, EventArgs e)
    {

        // 定义两个变量用来获取用户登录名和密码
        string strUserName;
        string strPassword;

        strUserName = Request.Form["NameTxt"].ToString().Trim();
        strPassword = Request.Form["PwdTxt"].ToString().Trim();

        /*if (!((strUserName == "yolanda") || (strPassword == "123")))
        {
            Response.Redirect("login.aspx");
        }*/

        if (strUserName == Session["UName"].ToString())
        {
            lblMessage.Text = "对不起,您已经登陆了";
        }
        else
        {

            //将用户名和密码存储到对应的UserName和Password中,并将用户名存储到session的UName中
            Session["UserName"] = strUserName;
            Session["Password"] = strPassword;
            Session["UName"] = strUserName;
            Response.Redirect("main.aspx");
        }

    }

取消事件

protected void btnCanle_Click(object sender, EventArgs e)
    {
        Response.Write("<script language='javascript' text='text/javascript'>window.close()</javascript>");
    }

3.聊天室的聊天主界面Main.aspx

此界面用到了HTML中的<frameset>标签,该标签作用是把页面分为上下两个窗口,上面窗口显示Display.aspx页面,下面的窗口显示Send.aspx页面。

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<Frameset rows="*,65">
<frame src="Display.aspx" scrolling="auto"></frame>
<frame src="Send.aspx" scrolling="auto"></frame>
</Frameset>
</html>

4.发送聊天信息页面Send.aspx

界面为:

文本框ID属性为:Messagetxt 。“发送”按钮id属性为:submitBtn 。 “清除 ” id属性为:ClearBtn

“发送”按钮SubmitBtn_Click事件

protected void SubmitBtn_Click(object sender, EventArgs e)
    {
        if (Request.Form["MessageTxt"] != "")
        {
            Application.Lock();

            //如果聊天记录超过了10条
            if (Int32.Parse(Application["TalkId"].ToString()) >= 10)
            {

           //将数组内容向下标减小的方向移动一位
                for (int i = 0; i < 9; i++)
                {
                    ((string[])Application["TalkContent"])[i] = ((string[])Application["TalkContent"])[i + 1];
                }
                //通过中间变量使聊天记录条数减1,并保存到原来的application对象的TalkId变量中
                int talkId = Int32.Parse(Application["TalkId"].ToString());
                talkId = talkId - 1;
                Application["TalkId"] = talkId;
            }
            string strUserName, strContent;
            string[] arrTempTalk = new string[10];
            int id;

            //获取用户登录用户名
            strUserName = Session["UserName"].ToString();
            //对用户输入的文本进行html编码
            strContent = Server.HtmlDecode(this.MessageTxt.Text);

            arrTempTalk = (string[])Application["TalkContent"];
            id = Int32.Parse(Application["TalkId"].ToString());
            arrTempTalk[id] = strUserName + " " + DateTime.Now.ToString() + "<font color=yellow> 说到:</font>" + strContent;

            id = id + 1;
            Application["TalkId"] = id;
            Application["TalkContent"] = arrTempTalk;

            Application.UnLock();
            this.MessageTxt.Text = "";
        }
    }

取消:

protected void ClearBtn_Click(object sender, EventArgs e)
    {
        this.MessageTxt.Text = "";
    }

未完,待续

#.net