夏沫梦影 发表于 2019-10-10 19:32

【C#】制作聊天室(Application+Session+Response+Request的使用)

本帖最后由 夏沫梦影 于 2019-10-10 19:34 编辑



Application对象的典型应用:聊天室的制作
软件:Visual Studio 2015
下载地址:https://www.lanzouj.com/i6p6vkd
练习:Application+Session+Response+Request
示例:
https://i.loli.net/2019/10/10/5ar3XwzdYop7yM1.gif
主要步骤:
1.新建一个网页,并命名为Login.aspx(并将其设置为起始页)

示例:
https://i.loli.net/2019/10/10/FARK8bWVO7q6PjB.pngLogin.aspx页面:创建一个3行2列的表格距地代码如下:
<table align="center" border="1" cellpadding="0" cellspacing="0" style="width:270px;height:150px">
      <tr>
            <td colspan="2" style="font-weight:bold;font-size:16pt;color:#4cff00;background-color:#54a4ff;text-align:center">登录</td>
      </tr>
                <tr>
            <td style="text-align:left;font-size:11pt;background-color:#4094c4">用户名:</td>
            <td style="background-color:#4094c4;text-align:left;">
                <asp:TextBox ID="txt_UserName" runat="server"></asp:TextBox>
            </td>
      </tr>
                <tr>
            <td colspan="2" style="background-color:#54a4ff;text-align:center;">
                <asp:Button ID="btn_Login" runat="server" Text="登录" />
                <asp:Button ID="btn_Quit" runat="server" Text="退出" />
            </td>
      </tr>
    </table>
Login.aspx.cs页面: 页面载入事件中添加一个判断,判断该用户是否已登录。具体如下:
protected void Page_Load(object sender, EventArgs e)
    {
      int P_int_judge = 0;
      P_int_judge = Convert.ToInt32(Request["value"]);
      if (!IsPostBack)
      {
            if (P_int_judge == 1)
            {
                Response.Write("<script>alert('该用户已登录!')</script>");
            }
      }
    }
登录按钮事件:
protected void btn_Login_Click(object sender, EventArgs e)
    {
      Application.Lock();
      int P_int_num; //在线人数
      string P_str_name;//登录用户
      string P_str_names;//已在线用户名
      string[] P_str_user;//用户在线数组
      P_int_num = Convert.ToInt32(Application["userNum"].ToString());
      if (txt_UserName.Text.Trim() == "")//非空验证
      {
            Response.Write("<script>alert('用户名不得为空')</script>");
      }
      else
      {
            //判断登录者是否已在线
            P_str_name = txt_UserName.Text.Trim();
            P_str_names = Application["user"].ToString();
            P_str_user = P_str_names.Split(',');
            for (int i = 0; i < P_int_num - 1; i++)
            {
                if (P_str_name == P_str_user.Trim())
                {
                  int P_int_judge = 1;
                  Response.Redirect("Login.aspx?value=" + P_int_judge);
                }
            }
            if (P_int_num == 0)//将登录者加入在线用户列表的Applicaion中
            {
                Application["user"] = P_str_name.ToString();
            }
            else
            {
                Application["user"] = Application["user"] + "," + P_str_name.ToString();
            }
            //将在线用户数量+1
            P_int_num += 1;
            Application["userNum"] = P_int_num;
            Session["userName"] = txt_UserName.Text.Trim();//将登录者信息存入Session中
      }
      
            Application.UnLock();
      Response.Redirect("Default.aspx");
    }
退出按钮事件:
protected void btn_Quit_Click(object sender, EventArgs e)
    {
      Response.Write("<script>window.close();</script>");
    }
2.新建一个全局变量:Global.aspx
开始事件中添加如下代码:
void Application_Start(object sender, EventArgs e)
    {
      // Code that runs on application startup
      //建立用户列表
      string user = "";    //用户列表
      Application["user"] = user;
      Application["userNum"] = 0;
      string chats="";   //聊天记录
      Application["chats"] = chats;
      //记录当前聊天数
      Application["current"] = 0;
    }
结束事件中添加如下代码:
void Application_End(object sender, EventArgs e)
    {
      //Code that runs on application shutdown
      Application["user"] = "";
      Application["chats"] = "";
    }
3.新建一个网页,用默认名称Default.aspx

示例:
https://i.loli.net/2019/10/10/FVsidgBxwyn7a4M.pngDefault.aspx页面

创建一个4行2列的表格:具体代码如下:
<div style="text-align:center">
    <table align="center" style="width:603px;height:442px" border="1" cellpadding="0" cellspacing="0">
      <tr>
            <td colspan="2" style="height:51px;font-size:16pt;color:#ffffff;background-color:#808080">软件开发聊天室</td>
      </tr>
      <tr>
            <td style="width:404px;height:18px">聊天信息</td>
            <td align="left" style="width:200px;height:18px;font-size:11pt;border-right-style:none;border-left-style:none" >用户列表</td>
      </tr>
      <tr>
            <td style="width:404px;height:354px">
                <iframe id="iframe1" src="Content.aspx" runat="server" scrolling="no" noresize="noResize" frameborder="0" style="width: 400px;height: 350px"></iframe>
            </td>
            <td style="width:200px;height:354px">
                <iframe id="iframe2" src="List.aspx" runat="server" scrolling="no" noresize="noResize" style="width:200px;height:350px"></iframe>
            </td>
      </tr>
      <tr>
            <td style="width:400px" align="left">
                <asp:TextBox ID="txt_Message" Width="310px" runat="server"></asp:TextBox>
                <asp:Button ID="btn_Send" runat="server" Text="发言" />
            </td>
            <td>
                <asp:Button ID="btn_Quit" runat="server" Text="退出聊天室" />
            </td>
      </tr>
    </table>
    </div>
Default.aspx.cs页面
发送按钮点击事件:
protected void btn_Send_Click(object sender, EventArgs e)
    {
      int P_int_current = Convert.ToInt32(Application["current"]);
      Application.Lock();
      if (P_int_current == 0 || P_int_current > 20)
      {
            P_int_current = 0;
            Application["chats"] = Session["userName"].ToString() + "说:" + txt_Message.Text.Trim() + "(" + DateTime.Now.ToString() + ")";
      }
      else
      {
            Application["chats"] = Application["chats"].ToString() + "," + Session["userName"].ToString() + "说:" + txt_Message.Text.Trim() + "(" + DateTime.Now.ToString() + ")";
      }
      P_int_current += 1;
      Application["current"] = P_int_current;
      Application.UnLock();
      txt_Message.Text = "";
      txt_Message.Focus();
    }
退出按钮点击事件:
protected void btn_Quit_Click(object sender, EventArgs e)
    {
      Application.Lock();
      string P_str_userName = Application["user"].ToString();
      Application["user"] = P_str_userName.Replace(Session["userName"].ToString(), "");
      Application.UnLock();
      Response.Write("<script>window.close();</script>");
    }
4.新建一个网页,命名为Content.aspx(用来显示聊天信息)
Content.aspx页面
添加一个文本框,改为多行显示:
<div>
      <asp:TextBox ID="txt_Content" runat="server" Height="345px" TextMode="MultiLine" Width="380px"></asp:TextBox>
    </div>
Content.aspx.cs页面
页面载入事件中添加如下代码:
protected void Page_Load(object sender, EventArgs e)
    {
      int P_int_current = Convert.ToInt32(Application["current"]);
      Application.Lock();
      string P_str_chats = Application["chats"].ToString();
      string[] P_str_chat = P_str_chats.Split(',');
      for (int i = P_str_chat.Length - 1; i >= 0; i--)
      {
            if (P_int_current == 0)
            {
                txt_Content.Text = P_str_chat.ToString();
            }
            else
            {
                txt_Content.Text = txt_Content.Text + "\n" + P_str_chat.ToString();
            }
      }
      Application.UnLock();
    }
5.新建一个网页,命名为List.aspx(用来显示用户信息)
List.aspx页面
添加一个listbox,具体如下:
<div>
      <asp:ListBox ID="lb_User" runat="server" Height="345px" Width="180px"></asp:ListBox>
    </div>
List.aspx.cs页面
页面载入事件中添加如下代码:
protected void Page_Load(object sender, EventArgs e)
    {
      ArrayList ItemList = new ArrayList();
      Application.Lock();
      stringP_str_names;//已在线的用户
      string[] P_str_user;//用户在线数组
      int P_int_num=Convert.ToInt32(Application["userNum"]);
      P_str_names = Application["user"].ToString();
      P_str_user =P_str_names.Split(',');
      for (int i =(P_int_num - 1); i >= 0; i--)
      {
            if (P_str_user.ToString()!= "")
            {
                ItemList.Add(P_str_user.ToString());
            }
            
      }
      lb_User.DataSource=ItemList;
      lb_User.DataBind();
      Application.UnLock();
    }

a876147772 发表于 2019-10-19 13:00

fangxiansheng 发表于 2019-10-17 15:24
英雄联盟无限视距软件从昨天开始出现了封号,本以为是换肤软件出现了问题,今天解封后试了一局,发现只开无 ...

每年这个时候,赛季末,尽量少用视距噢,等赛季结束就OK辣

fangxiansheng 发表于 2019-10-17 15:24

英雄联盟无限视距软件从昨天开始出现了封号,本以为是换肤软件出现了问题,今天解封后试了一局,发现只开无限视距又给我封了,望检查解决

skoa 发表于 2019-10-10 19:51

当时 在学校 好像 学过这个东西。。。

15774211127 发表于 2019-10-10 20:08

&#128591;感谢分享,不过这个页面丑得我一激灵:Dweeqw

夏沫梦影 发表于 2019-10-10 20:11

15774211127 发表于 2019-10-10 20:08
&#128591;感谢分享,不过这个页面丑得我一激灵

哈哈,淡定

psx1lin 发表于 2019-10-11 08:15

研究看看
感谢分享

heroic 发表于 2019-10-11 09:38

{:301_1009:}这页面算是很有特色了

414504394 发表于 2019-10-18 20:46

怎么不更新视距拉

夏沫梦影 发表于 2019-10-18 21:33

414504394 发表于 2019-10-18 20:46
怎么不更新视距拉

论坛不让发辅助
页: [1] 2 3
查看完整版本: 【C#】制作聊天室(Application+Session+Response+Request的使用)