【asp源码栏目提醒】:网学会员在asp源码频道为大家收集整理了“ASP.NET典型模块与项目实战大全(第10章) - 网络与通信“提供大家参考,希望对大家有所帮助!
第 10 章 聊天模块(AJAXiframe 技术) 随着网络的兴起和普及,网络聊天已经渐渐成为人们通过互联网通信的主要手段。
早期的聊天功能仅仅局限于局域网中,随着多媒体技术的发展,聊天功能逐渐过渡到互联网中,并且在聊天功能中还附带一些添加表情或语音对话等功能。
本章将讲解在互联网中聊天功能的具体实现过程。
10.1 简单的聊天功能 在互联网中通常通过聊天室实现聊天的功能。
在讲解聊天室的开发过程之前,本节通过开发一个简单的互联网聊天工具,来讲解如何在互联网中实现聊天功能,从而为了解后面要讲解的聊天室功能打下基础。
10.1.1 聊天登录的实现 聊天登录的作用是验证聊天人员的合法身份,聊天人员使用自己的用户名通过聊天登录页面登录之后,在聊天页面中就可以使用登录的账号发布聊天信息了。
本节将讲解聊天功能中聊天登录的具体实现方法。
说明:为了便于讲解,本节中不要求用户登录时输入密码,只输入合法的聊天频道和用 户名称即可。
聊天登录功能的设计步骤如下所示。
(1)新建一个网站,在网站中添加一个名称为 Logins 的 Web 窗体。
(2)在 Web 窗体页面中添加一个具有 3 行 2 列的表格。
(3)在表格的第 1 列单元格中分别输入登录页面的标签“聊天频道”和“用户姓名”。
(4)在表格第 2 列的第 1 个单元格和第 2 个单元格中分别添加两个文本框控件,用于输入“聊天频道”和“用户姓名”信息。
(5)在两个文本框后面分别添加一个 RequiredFieldValidator 控件,用于验证文本框控件中的内容是否为空。
(6)在表格的第 3 行第 2 列单元格中添加两个按钮控件,用于实现聊天登录的功能。
设计完成后的聊天登录页面如图 10.1 所示。
(7)双击“登录”按钮,进入登录页面的代码窗口中。
在“登录”按钮的单击事件下添加登录到聊天页面的程序代码如下: 第 10 章 聊天模块(AJAXiframe 技术) protected void BT_Enter_Clickobject sender EventArgs e //导航到聊天页面 //需要传递参数“聊天频道”和“匿称” Response.RedirectquotChatWin.aspxChannelquot TB_Channel.Text quotampUserquot TB_Username.Text 【代码解析】代码中通过使用 Response 对象的 Redirect方法,将输入的聊天频道和用户名称信息“传递”到聊天页面中。
(8)将 Logins Web 窗体设置为起始页,运行程序。
此时可以看到聊天登录页面的运行效果,如图 10.2 所示。
图 10.1 设计完成后的聊天登录页面 图 10.2 聊天登录页面的运行效果10.1.2 聊天功能的具体实现 聊天登录功能比较简单,在讲解了聊天登录功能的具体实现方法之后,本节将详细讲解聊天功能的具体实现。
本节要讲解的聊天功能由“保存与获取聊天信息”和“设计聊天页面”两部分组成。
下面具体讲解这两部分功能的具体实现过程。
1.保存与获取聊天信息 通常情况下,聊天信息是保存在数据库中的。
本节为了讲解方便,将聊天信息保存在一个静态的全局数组中。
通过对数据的写入和读取操作实现保存和读取聊天记录信息的功能,操作步骤如下所示。
(1)在网站中添加一个名称为 Chat 的类。
(2)在类中首先定义一个用于保存聊天信息的数组,代码如下: static protected ArrayList pArray new ArrayList //用来保存聊天信息的数组 (3)在类中添加将聊天信息保存到数组中的实现方法,具体实现的程序代码如下: ///ltsummarygt ///添加信息到数组中 ///lt/summarygt ///ltparam namequotsDealerquotgt聊天频道lt/paramgt ///ltparam namequotsUserquotgt用户lt/paramgt ///ltparam namequotsMsgquotgt聊天信息lt/paramgt static public void AddMessagestring sDealer string sUser string sMsg 187 第2篇
ASP.NET 典型模块开发与应用 string sAddText sDealer quotquot sUser quotquot sMsg quotltbrgtquot pArray.AddsAddText //判断数组内信息大于 500 时 if pArray.Count gt 500 //移出数组中的最后 50 条 pArray.RemoveRange0 50 【代码解析】代码中的 AddMessage 数组包含有聊天频道、用户和聊天信息 3 个输入参数,通过这几个参数将聊天信息保存到数组中。
注意:如果添加到数组中的聊天记录超过 500 行,数组将会移除前 50 行记录,这样就 避免了不断增加静态数组中的数据信息给系统带来的运行负担。
(4)在类中再添加一个读取静态数组中聊天信息的方法,具体实现的程序代码如下: ///ltsummarygt ///获取静态数组中的聊天信息 ///lt/summarygt ///ltparam namequotsDealerquotgt聊天频道lt/paramgt ///ltreturnsgt返回信息lt/returnsgt static public string GetAllMessagesstring sDealer //返回变量 string sResponse quotquot //遍历数组内的聊天信息 for int i 0 i lt pArray.Count i //调用 FormatChat方法,格式化聊天信息 sResponse sResponse FormatChatpArrayi.ToString sDealer return sResponse //返回所有聊天信息 ///ltsummarygt ///格式化聊天信息 ///lt/summarygt ///ltparam namequotsLinequotgt行lt/paramgt ///ltparam namequotsDealerquotgt聊天频道lt/paramgt ///ltreturnsgt聊天信息lt/returnsgt static private string FormatChatstring sLine string sDealer int iFirst sLine.IndexOfquotquot //设置行起始格式 int iLast sLine.LastIndexOfquotquot //设置行末尾格式 //格式化显示数组中保存的聊天信息 string sDeal sLine.Substring0 iFirst if sDeal sDealer return quotquot //取聊天信息中的用户名 string sUser sLine.SubstringiFirst 1 iLast - iFirst 1 string sMsg sLine.SubstringiLast 1 //粗体显示用户名 string sRet quotltBgtquot sUser quot: lt/Bgtquot sMsg quotquot return sRet //返回格式化内容188 第 10 章 聊天模块(AJAXiframe 技术) 【代码解析】代码中包括 GetAllMessages 和 FormatChat 两个用户自定义函数。
在GetAllMessages 用户函数中,通过调用 FormatChat函数实现从数组中读取聊天信息,并且将聊天信息格式化后再进行显示。
说明:有关 Chat 中的详细程序代码,请参阅光盘中的实例。
2.设计聊天页面 在完成了保存聊天记录和读取聊天记录的设计方法之后,下面再讲解聊天页面的设计方法。
(1)在网站中添加一个名称为 ScreenWin 的 Web 窗体。
(2)进入 Web 窗体的 HTML 代码窗口中,在该窗口中编辑 Web 窗体的 HTML 代码,编辑完成后 Web 窗体的 HTML 代码如下: lt Page LanguagequotCquot AutoEventWireupquottruequot CodeFilequotScreenWin.aspx.csquot InheritsquotTheChatScreenWinquot gt ltDOCTYPE html PUBLIC quot-//W3C//DTD XHTML 1.0 Transitional//ENquot quothttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdquotgt ltHTMLgt ltHEADgt lttitlegtTheChatScreenWinlt/titlegt lt--设置网页的现实标题--gt ltSCRIPT languagequotJavaScriptquotgt lt--JavaScript 脚本文件--gt function Down window.scroll0220000 lt/SCRIPTgt lt/HEADgt ltbody onloadquotDownquot topmarginquot4quot titlequotChat Screenquot bottommarginquot4quot leftmarginquot4quot rightmarginquot4quot bgcolorquotffffccquotgt ltform idquotForm1quot methodquotpostquot runatquotserverquotgt lt/formgt lt/bodygt lt/HTMLgt 【代码解析】代码中通过调用 JavaScript 函数,实现在浏览器中添加滚动条的功能。
(3)进入 ScreenWin Web 窗体的代码窗口中,在该窗口中添加输入聊天信息的程序代码。
添加聊天信息后代码窗口中的程序代码如下: using System using System.Collections using System.Configuration using System.Data using System.Linq using System.Web using System.Web.Security using System.Web.UI using System.Web.UI.HtmlControls using System.Web.UI.WebControls using System.Web.UI.WebControls.WebParts using System.Xml.Linq public partial class TheChatScreenWin : System.Web.UI.Page protected void Page_Loadobject sender EventArgs e 189 第2篇
ASP.NET 典型模块开发与应用 //判断频道是否为空 string sDealer quotquot if SessionquotChatChannelquot null sDealer SessionquotChatChannelquot.ToString Response.Writequotltmeta http-equivquotRefreshquotcontentquot4quotgtquot //输出更新信息 Response.WriteChat.GetAllMessagessDealer //获取频道内所有信息并输出 【代码解析】代码中首先判断聊天频道是否为空,如果聊天频道不为空则输出聊天频道中的聊天信息。
(4)在网站中再添加一个名称为 ChatWin 的 Web 窗体。
(5)切换到页面的设计视图中,在 Web 窗体页面中添加一个具有 2 行 1 列的表格。
在表格的第 1 行中使用 iframe 加载聊天信息页面 ScreenWin。
其实现的 HTML 代码如下: ltTDgt ltiframe stylequotBORDER-RIGHT: orange 2px solid BORDER-TOP: orange 2px solid BORDER-LEFT: orange 2px solid WIDTH: 450px BORDER-BOTTOM: orange 2px solid HEIGHT: 250px BACKGROUND-COLOR: ffffccquot srcquotScreenWin.aspxquotgtChat lt/iframegt lt/TDgt说明:iframe 元素可以理解为文档中的文档,或者理解为浮动的框架(FRAME) frames 。
集合提供了对 iframe 内容的访问。
(6)在表格的第 2 行中添加一个文本框控件和一个按钮控件,用于实现发送聊天信息的功能。
设计完成后的 ChatWin Web 窗体页面如图 10.3 所示。
图 10.3 ChatWin Web 窗体的设计页面 (7)在 Web 窗体的 Load 事件下,添加判断是否存在聊天频道的程序代码如下: protected void Page_Loadobject sender EventArgs e //判断如果不是页面回发 if Page.IsPostBack false //是否存在聊天频道 if Request.ParamsquotChannelquot null SessionquotChatChannelquot Request.ParamsquotChannelquot.ToString else //如果没有,默认为 1190 第 10 章 聊天模块(AJAXiframe 技术) SessionquotChatChannelquot quot1quot 【代码解析】代码中通过 Request 对象判断是否存在聊天频道。
(8)在“发送信息”按钮的单击事件下,添加发送聊天信息的程序代码。
具体实现的程序代码如下: protected void BT_Send_Clickobject sender EventArgs e string sChannel quotquot string sUser quotquot //判断选择的频道 if Request.ParamsquotChannelquot null sChannel Request.ParamsquotChannelquot.ToString else sChannel quot1quot //判断登录用户 if Request.ParamsquotUserquot null sUser Request.ParamsquotUserquot.ToString else //如果是匿名用户 Random pRan new Random int iNum pRan.Next9 sUser quotAnnonymousequot iNum //发送聊天信息 if TB_ToSend.Text.Length gt 0 Chat.AddMessagesChannel sUser TB_ToSend.Text TB_ToSend.Text quotquot //清空聊天文本框 【代码解析】代码中首先判断是否有聊天频道,然后判断聊天用户是否登录,用户登录之后可以向对方用户发送聊天数据信息。
(9)到此为止,一个具有简单聊天功能的互联网聊天工具就设计完成了。
用户通过聊天登录页面登录之后,就可以实现聊天功能了,如图 10.4 所示。
图 10.4 用户的聊天页面 191 第2篇
ASP.NET 典型模块开发与应用 10.2 网络聊天室的实现 网络聊天室是在一个网站中,供许多人通过文字与符号进行实时交谈、聊天的场所,是一个向整个因特网开放的地方。
网络聊天室通常分为聊天区、功能区和名单区 3 部分,通过这 3 部分实现网络聊天的功能。
本节将讲解网络聊天室的具体实现方法。
10.2.1 数据库设计与配置 网络聊天室中的聊天信息和用户注册等信息通常都是保存在数据库中的,在本节中讲解的网络聊天室中,需要用到两张数据表保存网络聊天室中的数据信息,一张是保存聊天账号的数据表 UserInfo;另一张是保存聊天信息的数据表 ChatInfo。
下面就分别介绍一下这两张数据表的逻辑结构及在网站中配置数据库连接的实现方法。
1.UserInfo数据表的逻辑结构 UserInfo 数据表用于保存网络聊天室的注册账号信息,该数据表的逻辑结构如表 10.1所示。
表 10.1 UserInfo数据表的逻辑结构 字 段 名 字 段 类 型 说 明 id int 编号 username Varchar50 用户名 password Varchar50 密码 isonline bit 是否在线 2.ChatInfo数据表的逻辑结构 ChatInfo 数据表用于保存聊天记录信息和系统提示等信息,该数据表的逻辑结构如表10.2 所示。
表 10.2 ChatInfo数据表的逻辑结构 字 段 名 字 段 类 型 说 明 id int 编号 user_from Varchar50 发送聊天信息的用户 user_to Varchar50 接收聊天信息的用户 content Varchar255 聊天内容 expression Varchar50 表情描述 color Varchar50 颜色 ispublic bit 是否公开发送信息 sendtime datetime 发送时间192 第 10 章 聊天模块(AJAXiframe 技术) 3.配置数据库连接 在设计完数据库之后,需要在网站工程中的 web.config 文件中配置数据库的连接,使得网站工程与数据库之间建立起连接。
在网站工程的 web.config 文件中配置数据库连接的操作步骤如下所示。
(1)启动 Visual Studio 2010,新建一个网站。
(2)首先运行网站,使得在网站的根目录下自动创建一个 web.config 文件。
(3)打开 web.config 文件,在 configuration 节点中添加如下代码,配置网站的数据库连接。
ltappSettingsgt ltadd keyquotConnectionStringquot valuequotData SourceLJMMSSQL2005 user idsapassword123456initial catalogbook09quot/gt lt/appSettingsgt 【代码解析】代码中的 LJMMSSQL2005 是服务器名称;123456 是登录 sa 的密码;book09 是网络聊天室的数据库名称。
10.2.2 用户登录 用户登录的作用是验证登录聊天室的用户是否合法,用户只有通过登录页面登录聊天室之后,才可以通过聊天室与其他用户进行聊天。
本节讲解用户登录的具体实现方法。
(1)在网站中新建一个名称为 Login 的 Web 窗体。
(2)首先在网站中引用 Ajax.dll 文件,然后在 Web 窗体中添加一个表格。
(3)在表格中添加一个 LoginCustomControl 控件,该控件是一个实现用户登录的组件。
(4)在网站中添加一个名称为 db 的类文件,该类文件中保存着操作数据库的程序代码,其主要实现的程序代码如下: //链接数据库 public static SqlConnection con SqlConnection con new SqlConnectionConfigurationSettings.AppSettingsquotConnectionStringquot return con //返回数据连接字符串 //返回数据集 public static DataTable dsstring que SqlConnection con db.con //声明一个数据连接对象 SqlDataAdapter da new SqlDataAdapter da.SelectCommand new SqlCommandque con DataSet ds new DataSet //声明一个数据集对象 da.Fillds quotConnectionStringquot //执行加载数据信息的操作 return ds.TablesquotConnectionStringquot //返回数据集 //返回 SQL 语句的执行结果集 public static string scrstring que SqlConnection con db.con 193 第2篇
ASP.NET 典型模块开发与应用 con.Open //打开数据连接 SqlCommand cmd new SqlCommandque con return cmd.ExecuteScalar.ToString //返回 SQL 语句的执行结果集 【代码解析】代码中的 con函数用于与数据库取得连接;ds函数用于获取数据集对象;scr函数用于返回 SQL 语句的执行结果集。
(5)在 LoginCustomControl 控件的 Login 事件下,添加判断登录用户是否为合法用户的程序代码,具体实现的程序代码如下: protected void LoginCustomControl1_Loginobject sender System.EventArgs e int iRet -1 SqlConnection conn new SqlConnection ConfigurationSettings.AppSettingsquotConnectionStringquot SqlCommand cmd conn.CreateCommand cmd.CommandType CommandType.StoredProcedure cmd.CommandText quotUserLoginquot cmd.Parameters.Addquotusernamequot LoginCustomControl1.UserName cmd.Parameters.Addquotpasswordquot LoginCustomControl1.Password //存储过程返回值 SqlParameter paramOut cmd.Parameters.AddquotRETURN_VALUEquot quotquot paramOut.Direction ParameterDirection.ReturnValue conn.Open cmd.ExecuteNonQuery //执行操作 conn.Close //关闭数据连接 iRet intcmd.Paramete.