ASP.NET基于BS方式的即时通讯软件的设计与实现

embedded/2025/3/13 14:44:51/

摘  要

即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,而各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。随着互联网的发展,即时通讯的运用将日益广泛,即时通讯软件业方兴未艾。本文首先描述了即时通讯业的发展和现状,然后初步探讨了即时通讯所涉及到的一些技术,最后对现有的技术进行了对比和分析,提出了一些可能的改进方案,并且设计了一个名为web-msn的即时通讯系统。

web-msn是基于B/S的模式的即时通讯系统,通过IE等浏览器直接完成客户端的登录、数据传输,更加便捷了用户之间的通讯和交友;使用最新的Ajax技术,使其非常快,无需等待页面的刷新,实现了即时通讯的功能。

在系统设计与建模过程中,使用了UML和面向对象的分析、设计方法,本系统基于.NET Framework 1.1,使用Visual Studio .NET 2003作为开发工具,将.NET中的一些新技术运用到了系统中;在开发过程中用到了时下流行的重构开发方法,优化了系统的设计。

关键词:Web-msn;即时通讯;B/S; Ajax

2.5  开发环境

        2.5.1 vs2003开发环境介绍

 Visual Studio是微软公司出品的一款大型应用软件,是一套完整的开发工具集,它主要用于生成ASP.NET Web应用程序、XML Web Services、桌面应用程序和移动应用程序。Visual Basic、Visual C++、Visual C# 和Visual J# 全都使用相同的集成开发环境(IDE)。利用此IDE可以共享工具且有助于创建混合语言解决方案,使程序可以使用不同的语言共同开发。NET开发平台由一组用于建立Web服务应用程序和Windows桌面应用程序的软件组件构成,包括.NET框架(Framework)、.NET开发工具和ASP.NET。Visual Studio 2003的集成开发环境中为开发人员提供了大量的实用工具以提高工作效率。这些工具包括了自动编译、项目创建向导、创建部署工程等。        

        2.5.2 Sql Server 2000介绍

SQL Server2000由一系列相互协作的组件构成,能满足最大的Web站点和企业数据处理系统存储和分析数据的需要。SQLServer构架各种组件通过何种方式发挥合力,更富成效地管理数据。  
     SQL Server2000数据库引擎提供完整的XML支持。它还具有构成最大的Web站点的数据存储组件所需的可伸缩性、可用性和安全功能。SQL Server2000程序设计模型与WindowsDNA构架集成,用以开发Web应用程序,并且SQL Server2000支持EnglishQuery和 Microsoft搜索服务等功能,在Web应用程序中包含了用户友好的查询和强大的搜索功能。

        2.5.3 C#语言介绍

C#是一种语言,它是专门为了微软的.NET战略而设计的一种语言. C#也叫C#.Net。

2.6  关键技术-Ajax简介

Ajax 是异步JavaScript和XML(Asynchronous JavaScript and XML)的英文缩写。“Ajax”这个名词的发明人是Jesse James Garrett,而大力推广并且使Ajax技术炙手可热的是Google。Google发布的Gmail,Google Suggest等应用最终让人们了解了什么是Ajax。

Ajax的核心理念在于使用XMLHttpRequest对象发送异步请求,最初为XMLHttpRequest对象提供浏览器支持的微软公司。早在1998年,微软公司开发Web版Outlook时,就已经以ActiveX控件的方式为XMLHttpRequest提供了支持。Ajax是使用客户端脚本与Web服务器交换数据的Web应用开发方法。这样,Web页面不用打断交互流程进行重新加裁,就可以动态地更新。使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面。

实际上,Ajax不是一种技术,而是几种技术。每种技术都具有独特之处,合在一起就形成了一个功能强大的新技术。Ajax包括:

1) XHTML和CSS;

2) 使用文档对象模型进行动态显示和交互;

3) 使用XML和XSLT进行数据交互和操作;

4) 使用XMLHttpRequest进行异步数据接收;

5) 使用JavaScript将它们绑定在一起。

5.1  发送消息功能实现

为了实现发送消息的功能,在服务器端代码中需要定义Ajax方法SendMessage,具体代码如下:

 [AjaxMethod()]

public void SendMessage(string strUsername, string strContent)

{

// 数据连接

SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);

// SQL命令

SqlCommand cmd = conn.CreateCommand();            

cmd.CommandText = string.Format("SendMessage '{0}','{1}', '{2}'",

User.Identity.Name, strUsername, strContent);

try

{

// 打开数据连接

conn.Open();

// 执行SQL,发送消息

cmd.ExecuteNonQuery();

}

catch (SqlException)

{

}

finally

{

// 关闭连接

conn.Close();

}

然后在客户端编写getMessage函数,调用服务器Ajax方法进行消息的发送。

getMessage函数的代码如下:

// 发送消息

function sendMessage()

{

// 消息内容输入框

var ta_content = el("content");

// 如果输入内容不为空

if (ta_content.value.length > 0)

{

    // 消息显示区域

     var div_recentMsg = el("recentMsg");

// 用户名

var username = document.location.search.split('=')[1];

// 发送消息

ch111.SendMsg.SendMessage(username, ta_content.value);

// 清空输入框

ta_content.value = "";

// 页面跟随输入框滚动

ta_content.scrollIntoView(false);

// 获取新消息

getNewMessage();

}

5.2   接收消息功能实现

        为了实现接收消息的功能,在服务器端代码中需要定义Ajax方法GetNewMessage,具体代码如下:

[AjaxMethod()]

public DataSet GetNewMessage()

{

// 返回的数据集

    DataSet ds = new DataSet();

// 数据连接

     SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);

// SQL命令

    SqlCommand cmd = conn.CreateCommand();           

// 数据适配器

    SqlDataAdapter da = new SqlDataAdapter(cmd);

             try

             {

                  // 向DataSet中填充消息数据

                  da.Fill(ds);

try

{

// 向DataSet中填充消息数据

da.Fill(ds);

}

catch (SqlException)

{

}

finally

{

// 关闭连接

conn.Close();

}

return ds;

}

然后在客户端编写getNewMessage函数,调用服务器Ajax方法进行消息的发送。getNewMessage函数的代码如下:

function getNewMessage()

{

    // 用户名

    var username = document.location.search.split('=')[1];

// 消息显示区域

    var div_recentMsg = el("recentMsg");

// 获取最新消息的数据表

    var dt = ch111.SendMsg.GetNewMessage().value.Tables[0];

    for (var i = 0;i < dt.Rows.length;i++)

    {

       // 一条消息对应与一个<span>对象

       var oneMsg = document.createElement("span");

// 消息发送者与发送对象

       var strLine1 = dt.Rows[i].sender + "说: (" + dt.Rows[i].sendtime + ")";

                      strLine1 = DealBrackets(strLine1);

// 消息内容

       var strLine2 = dt.Rows[i].content;

                      strLine2 = DealBrackets(strLine2);

// 显示样式

oneMsg.innerHTML = "<pre>" + strLine1 + "<br>&nbsp;&nbsp;"

+ strLine2 + "</pre>";

                     

 

         oneMsg.style.padding = "2px 2px 2px 2px";

         oneMsg.style.color = (dt.Rows[i].sender == username) ? "blue" : "red";

         oneMsg.style.fontFamily = "'Courier New' , 宋体";

// 附加到DOM

         div_recentMsg.appendChild(oneMsg);

         }

       }

            

    // 主进程循环

    function mainLoop()

    {

         // 获取新消息

         getNewMessage();

// 每隔1秒检查一次

         setTimeout("mainLoop()", 1000);

    }

            

    // 显示最近的消息

    getRecentMsg();

// 定时更新消息列表

    mainLoop();

结    论

本次对即时通讯的课题研究涉及到了即时通讯协议的定制;即时通讯服务模式的探讨; web-msn系统建模、设计到实现的一系列过程,重点讲叙了Ajax 新技术的使用等知识,也介绍了相关的社会科学理论以及与即时通讯软件的紧密结合,纵观即时通讯事业的壮大和发展,即时通讯的服务功能将会越来越丰富和完善,并必将更加深入地渗透到我们的日常生活中来,及时的研究即时通讯技术,无论是对我们的研究还是生活,都将带来相当大的影响。


http://www.ppmy.cn/embedded/1786.html

相关文章

前端三大件速成 01 HTML

文章目录 一、前端基础知识二、标签1、什么是标签2、标签的属性3、常用标签&#xff08;1&#xff09;声明&#xff08;2&#xff09;注释&#xff08;3&#xff09;html 根标签&#xff08;3&#xff09;head标签&#xff08;4&#xff09;body标签 三、特殊字符四、其他标签1…

springCloud-Feign 拦截器使用,传递header中的值

场景&#xff1a;服务A 调用 服务B 1 编写拦载器类 import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; i…

吴恩达机器学习:均值聚类法(K-means Clustering)

在本练习中&#xff0c;您将实现K-means算法并将其用于图像压缩。 您将从一个样本数据集开始&#xff0c;该数据集将帮助您直观地了解K-means算法的工作原理。之后&#xff0c;您将使用K-means算法进行图像压缩&#xff0c;将图像中出现的颜色数量减少到该图像中最常见的颜色。…

云原生数据库海山(He3DB)PostgreSQL版核心设计理念

本期深入解析云原生数据库海山PostgreSQL版&#xff08;以下简称“He3DB”&#xff09;的设计理念&#xff0c;探讨在设计云原生数据库过程中遇到的工程挑战&#xff0c;并展示He3DB如何有效地解决这些问题。 He3DB是移动云受到 Amazon Aurora 论文启发而独立自主设计的云原生数…

尚鼎环境科技诚邀您参观2024第13届生物发酵展

参展企业介绍 尚鼎环境科技(江苏)有限公司设立于2010年&#xff0c;公司坐落于江南平原南端素有『苏北门户』之称的古城扬州&#xff0c;办公室位在江苏省扬州市邗江区高新技术创业服务中心。 尚鼎环境科技长年致力于食品精炼/环境工程领域全程技术服务&#xff0c;工程实绩遍…

postgreSql判断表是否存在某个字段

在PostgreSQL中&#xff0c;可以使用information_schema.columns视图来检查表是否存在某个字段。以下是一个SQL查询示例&#xff0c;它检查名为sys_statlog的表中是否存在名为origin_type的字段&#xff1a; SELECT EXISTS (SELECT 1FROM information_schema.columnsWHERE tab…

如何采集opc服务器数据上传云端

为了进一步提高生产效率&#xff0c;生产制造的不断朝着智能化发展和升级&#xff0c;传统的自动化生产系统已经不能满足需求。传统的SCADA系统一般是用于现场的数据采集与控制&#xff0c;但是本地控制已经无法满足整个工厂系统智能化数字化的需求&#xff0c;智能化数字化是需…

SpringMVC 异常没有处理,发送 /error 请求(404 错误)

现象&#xff1a; 在过滤器中进行鉴权时候抛出了异常&#xff0c;此时客户端会收到 404 错误&#xff0c;接口确定是存在&#xff0c;为什么会收到 404 错误呢&#xff1f; {"timestamp": "2024-04-16T03:12:19.83200:00","status": 404,"…