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

摘  要

即时通讯(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.mzph.cn/news/816426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot(06):Spring Boot与MySQL搭配,打造极简高效的数据管理系统

1. 前言 Spring Boot 是一个基于Spring框架的快速开发框架&#xff0c;可以使开发者快速搭建一个可靠的Java Web应用程序。而MySQL是最广泛使用的关系型数据库系统之一&#xff0c;也是Spring Boot整合数据库的首选。本文将介绍Spring Boot如何整合MySQL数据库。 2. 摘要 本文…

最短路计数

最短路计数 提交数: 51, 通过率: 54.9%, 平均分: 65.49 题目描述: 给出一个N个顶点M条边的无向无权图&#xff0c;顶点编号为1~N。问从顶点1开始&#xff0c;到其他每个点的最短路有几条&#xff1f; 输入格式: 第一行包含2个正整数N, M, 分别为图的顶点数与边数。 接下来…

安全加速SCDN带的态势感知能为网站安全带来哪些帮助

随着安全加速SCDN被越来越多的用户使用&#xff0c;很多用户都不知道安全加速SCDN的态势感知是用于做什么的&#xff0c;德迅云安全今天就带大家来了解下什么是态势感知&#xff0c;态势感知顾名思义就是对未发生的事件进行预知&#xff0c;并提前进行防范措施的布置&#xff0…

基于单片机的智能照明控制系统设计与实现

【摘要】为改善传统照明方式能源浪费的问题,实现对照明系统展开智能化的有效控制,高电能的利用率。本文介绍了一种STC12 系列单片机的智能照明控制系统,通过对控制系统的硬件设计及软件设计,在实现智能控制的基础上兼具节能设计,为照明智能控制系统的后续发展作出了充足准…

机器学习(31)PINN

文章目录 摘要Abstract一、监督学习二、文献阅读1. 题目2. abstract3. 偏微分方程的数据驱动解3.1连续时间模型example(Schrodinger equation)&#xff1a; 3.2离散时间模型Example (Allen–Cahn equation)&#xff1a; 4. 文献解读4.1 Introduction4.2 创新点 三、实验内容1.实…

车载电子电器架构 —— 电子电气架构开发总结和展望

车载电子电器架构 —— 电子电气架构开发总结和展望 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要…

【web网页制作】html+css旅游家乡山西主题网页制作(3页面)【附源码】

山西旅游网页目录 涉及知识写在前面一、网页主题二、网页效果Page1、景点介绍Page2、酒店精选|出行攻略Page3、景色欣赏 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码4.1 主页模块源码4.2 源码获取方式 作者寄语 涉及知识 山西旅游主题网页制作&am…

为什么光伏探勘测绘需要无人机?

随着全球对可再生能源需求的不断增长&#xff0c;光伏产业也迎来了快速发展的机遇。光伏电站作为太阳能发电的主要形式之一&#xff0c;其建设前期的探勘测绘工作至关重要。在这一过程中&#xff0c;无人机技术的应用正逐渐展现出其独特的优势。那么&#xff0c;为什么光伏探勘…

Java调用http接口的几种方式(HttpURLConnection、OKHttp、HttpClient、RestTemplate)

Java作为后端语言是开发接口实现功能供客户端调用接口&#xff0c;这些客户端中最主要是本项目的前端&#xff1b;但有时候也需要Java请求其他的接口&#xff0c;比如需要长连接转短链接&#xff08;请求百度的一个接口可以实现&#xff09;、获取三方OSS签名、微信小程序签名、…

从零实现诗词GPT大模型:GPT是怎么生成内容的?

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 再开始编写GPT之前,我们得对GPT是怎么生成内容的有一个大致的了解。目前的神经网络我们大多都可以看成是一个黑盒,即我们把数据输送给网络后,网络给我我们输出,我们可以不用关心这个黑盒里到底是怎么实现…

IDEA 使用备忘录(不断更新)

IDEA 项目结构&#xff08;注意层级结构&#xff0c;新建相应结构时&#xff0c;按照以下顺序新建&#xff09;&#xff1a; project&#xff08;项目&#xff09; module&#xff08;模块&#xff09; package&#xff08;包&#xff09; class&#xff08;类&#xff09; 项…

公布应用程序

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…

【Vue】新手一步一步安装 vue 语言开发环境

文章目录 1、下载node.js安装包 1、下载node.js安装包 1.打开node.js的官网下载地址&#xff1a;http://nodejs.cn/download/ 选择适合自己系统的安装包&#xff1a;winds、mac 2. 配置node.js和npm环境变量 安装好之后&#xff0c;对npm安装的全局模块所在路径以及缓存所在路…

Spring Boot | Spring Boot中进行 “文件上传” 和 “文件下载”

目录: 一、SpringBoot中进行 " 文件上传" :1.编写 "文件上传" 的 “表单页面”2.在全局配置文件中添加文件上传的相关配置3.进行文件上传处理&#xff0c;实现 "文件上传" 功能4.效果测试 二、SpringBoot中进行 "文件下载" :“英文名称…

ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现

摘 要 通过搜索引擎从互联网上获取有用信息已经成为人们生活的重要组成部分&#xff0c;Lucene是构建搜索引擎的其中一种方式。搜索引擎系统是在.Net平台上用C#开发的&#xff0c;数据库是MSSQL Server 2000。主要完成的功能有&#xff1a;用爬虫抓取网页&#xff1b;获取有效…

NPU编译MultiScaleDeformableAttention

NPU对pytorch&#xff0c;想将检测模型在NPU上训练&#xff0c;存在编译MultiScaleDeformableAttention的需求。 然而&#xff0c;原dino模型https://github.com/IDEA-Research/DINO/tree/main/models/dino/ops/src 仅包含CPU版本和GPU版本&#xff1a; 是不是就真的无法解决…

传统图机器学习的特征工程-连接

概念及应用场景 通过已知连接补全未知连接 将link编码成为向量输入到机器学习模型中&#xff1a; 1.直接提取link的特征&#xff0c;构建D维向量 2.把link两段节点的D维向量拼在一起&#xff08;丢失了link本身的连接结构信息&#xff09; 应用&#xff1a; 1.客观静态图…

深度学习图像处理基础工具——opencv 实战信用卡数字识别

任务 信用卡数字识别 穿插之前学的知识点 形态学操作 模板匹配 等 总体流程与方法 1.有一个模板 2 用轮廓检测把模板中数字拿出来 外接矩形&#xff08;模板和输入图像的大小要一致 &#xff09;3 一系列预处理操作 问题的解决思路 1.分析准备&#xff1a;准备模板&#…

docker 安装 nginx + httpd + php-fpm

原文地址&#xff1a;http://www.taoluyuan.com/index.php/archives/30/#2 展示 1.安装 1.1安装docker 1.2安装nginx 1.3安装apache-httpd 1.4安装php-fpm 2.配置nginx反向代理 httpdphp-fmp 1.安装 1.1安装docker 移除旧的版本&#xff1a; sudo yum remove docker 安装…

Hive进阶Day05

一、HDFS分布式文件存储系统 1-1 HDFS的存储机制 按块&#xff08;block&#xff09;存储 hdfs在对文件数据进行存储时&#xff0c;默认是按照128M(包含)大小进行文件数据拆分&#xff0c;将不同拆分的块数据存储在不同datanode服务器上 拆分后的块数据会被分别存储在不同的服…