文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 招聘 专题 新闻
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» Web开发 » 利用AJAX和ASP.NET实现简单聊天室       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 利用AJAX和ASP.NET实现简单聊天室  ( 查看:1031  回复:2 )   
 
大家发财
技术员  点击可查看详细



帖子 303
精华 0
无忧币 637
积分 870
阅读权限 30
注册日期 2006-10-29
最后登录 2008-7-22 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-9-29 16:14   标题:利用AJAX和ASP.NET实现简单聊天室
上一帖 |
介绍

我的第一个简单的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 函数将要执行在这个页面上:


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 );
}
完工!就是这些了。没什么特别的地方,下载示例程序,然后理解这些代码!

原作者 Dahan Abdo
翻译 yueue
原文章地址

源代码下载:
http://www.codeproject.com/Ajax/UChat/Uchat.zip
http://www.cnblogs.com/Files/yueue/Uchat.zip
本地下载:Uchat.zip
『文章来源:电脑精品教程网 所属栏目:程序设计语言/教程文章 相关专题:C/C++ .net Java PHP web Powerbuilder



2007-9-29 16:141楼
[ 顶部 ]
 
tgbao
新新人类  点击可查看详细



十二生肖之牛   天秤座   行业勋章   技术勋章   诚信兄弟  
帖子 17
精华 0
无忧币 5
积分 17
阅读权限 20
来自 (保密)
注册日期 2007-10-30
最后登录 2008-5-20 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2007-10-30 11:55 
简单的也不知道



网络工程师到底该不该去考CCIE认证?
2007-10-30 11:552楼
[ 顶部 ]
 
wfang921
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 11
积分 1
阅读权限 20
注册日期 2007-12-26
最后登录 2007-12-26 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-12-26 13:55 
谢谢拉

省下不少功夫



网络工程师到底该不该去考CCIE认证?
2007-12-26 13:553楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号