热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » ASP/ASP.NET编程 » 利用AJAX和ASP.NET实现简单聊天室

利用AJAX和ASP.NET实现简单聊天室

论坛链接
  • 利用AJAX和ASP.NET实现简单聊天室
  • 发布时间:2007-09-15 23:21:00    浏览数:8656    发布者:abcdef133    设置字体【   
介绍

 我的第一个简单的Chat room 是用ASP 3.0 写成的。那无外乎有二个TextBox,他们发送消息给程序变量然后显示在一个每秒刷新的页面上。在那个时代,一个真正的聊天室必须运用Java Applet或ActiveX control。不过这一切都在AJAX到来之后改变了。AJAX是一个结合了XML 和 JavaScript的异步通信机制。现在我们可以只用服务器代码和一点JavaScript 。这篇文章就是介绍如何用AJAX技术来构建一个简单的聊天室。

示例程序

 示例程序是一个单一的多用户聊天室。其内部维护着一个已登录用户的列表。列表将祛除session过期的用户。同时它还支持一些命令比如 /admin Clear 清除聊天室 /nick [Name] 改变用户姓名。

你还需要知道

 这个程序使用一个类叫做 ChatEngine 。 这个类控制了全部的用户和消息。用户被储存在一个Hashtable 里,而消息储存在 StringCollection 里:Hashtable users;
StringCollection chat; 一个 ChatEngine 的全局实例被放置在 Global.asax.cs :public static UChat.ChatEngine.IChatEngine Engine = new UChat.ChatEngine.ChatEngine(); 一个JavaScript 函数用来异步的将全局变量内的数据显示在页面上:function setTimers()
{
timeID = window.setTimeout( "updateAll()", refreshRate );
} 利用每个用户提供的名称和ID来标识用户:public void AddUser(string id, string user)
{
//make sure user name does not exist already
if( !UserExists( user ) )
{
//add user to users list
users.Add( id, user );
//display a notification message to all users
chat.Add( this.MakeServerMessage(string.Format(
joinedfmt, user ) ));
}
} 截图和实现步骤



主页显示了聊天室的基本信息,比如有多少人在聊天室、ChatLog的大小。
为了能够登录聊天室,必须提供一个名称。

当 Login 按钮被单击。下面的代码就会被执行:protected void Login( object sender, EventArgs e )
{
string user = txtUsername.Text; if( !ValidateNick( user ) ) return;
if( Global.Engine.UserExists( user ) )
{
lblErrorMsg.Text = "A user with this " +
"name already exists, try again."
return;
}
Response.Redirect( "Server.aspx?action=Login&u=" + user );
}
      进行一些验证以后,用户会被转向到另一个页面,这个页面会利用 AddUser 函数将用户放入用户列表。当这一切都做好了。用户又会被转向到 Chat.aspx 页面,下面的 JavaScript 函数将要执行在这个页面上:


sniffBrowserType();
//Shows loading.. screen
showLoadScreen();
//Set the javascript timer and
//loads user list and messages
setTimers();
setFocus('mytext');

<input type="text" class="mytext"
id="mytext" onkeydown="captureReturn(event)"> 当用户输入了文字,并且按了回车。下面的代码就会被执行:// Capture the enter key on the input box and post message
function captureReturn( event )
{
if(event.which || event.keyCode)
{
if ((event.which == 13) || (event.keyCode == 13))
{
postText();
return false;
}
else {
return true;
}
}
}
function postText()
{
rnd++;
//Clear text box first
chatbox = getElement( "mytext" );
chat = chatbox.value;
chatbox.value = ""
//get user GUID from url
userid = location.search.substring( 1, location.search.length );
//construct Ajax Server URL
url = 'Server.aspx?action=PostMsg&u=' + userid + '&t=' +
encodeURIComponent(chat) + '&session=' + rnd;
//Create and set the instance
//of appropriate XMLHTTP Request object
req = getAjax();
//Update page with new message
req.onreadystatechange = function(){
if( req.readyState == 4 && req.status == 200 ) {
updateAll();
}
}
req.open( 'GET', url, true );
req.send( null );
} 完工!就是这些了。没什么特别的地方,
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理