网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.将ASP代码移植为VB COM组件-4.
.ASP与JSP的比较(二) .
.asp+中是如何连接数据库ado+的.
.用ADODB.Stream代替FSO读取文本文.
.地址栏参数的判断总结 .
.ASP调用ORACLE存储过程并返回结果.
.SQL Server中单引号的两种处理技.
.Adodb.Command 平时很少注意到的.
.纯猝使用VBScript来实现加密.
.ASP数据库编程SQL常用技巧.
.ASP创建EXCHANGE用户的一段代码.
.PHP和C通过Socket通信--UDP篇.
.ASP伪造REFERER.
.如何使用XQI?.
.用排序串字段实现树状结构(例程.
.从Access数据库恢复BMP图像并显示.
.随机访问Recordset的一条记录.
.实现分页的例子-使用存储过程来实.
.用XML数据岛解决用户界面问题 - 1.
.asp实现在web中显示电子表格数据.

在红蜻蜓中实现多房间

发表日期:2001-2-8


在global中完成两件事
新房间在线人员名单的初始化(application_onstart)
Dim nameindex(0)
useronlinename=" "
onliners=0
Application("hxf_c_onlinelist")=nameindex
Application("hxf_c_useronlinename")=useronlinename
Application("hxf_c_chatrs")=onliners
将这一段提前在rs.close setrs=nothing
然后加入
rs.Close
rs.Open "select id from reginfo where grade>6",conn
do while not (rs.EOF or rs.BOF)
--chatroomsn=rs("id")
--Application("hxf_c_onlinelist"&chatroomsn)=nameindex
--Application("hxf_c_useronlinename"&chatroomsn)=useronlinename
--rs.MoveNext
loop

关于Session_OnEnd的修改应该在后面说才对
然后就是加入聊天室了hqtchat.asp关于这儿的调用我们应该加两个参数
chatroomsn和chatroomname聊天室的房间号和聊天室的名称
chatroomsn=request.querystring("chatroomsn")
chatroomname=request.querystring("chatroomname")
创建session("hxf_c_mylocale")=chatroomsn
换聊天室的名称
chatroomname=Application("hxf_c_chatroomname")
为chatroomname=Application("hxf_c_chatroomname")&mychatroomname

crm="<%=Application("hxf_c_chatroomname")%>";
为crm="<%=Application("hxf_c_chatroomname")&mychatroomname%>";

然后就是替换了找出你所有文件中的application("hxf_c_useronlinename")为application("hxf_c_useronlinename"&session("hxf_c_mylocale"))
替换application("hxf_c_onlinelist")为application("hxf_c_onlinelist"&session("hxf_c_mylocale"))当然Application_OnStrat中的部分除外
事实是我是在chatroomsn=session("hxf_c_mylocale")之后用chatroomsn换掉了上面的session("hxf_c_mylocale")在循环中这样调用session并不是一个好主意

这样每个房间有了自己的独立的在线名单了
下一步是什么?我只能对我自己所在聊天室中的人说话而且也只能收到同一房间中的人说的话是的那我们应该在我们说的每一句话中加入一个关于房间号的信息,可是我并不想再加一个sd信息这样会好麻烦的,于是我看中了syscolor,先改syscolor中的blue和black因为这两个值 是不定长的不好处理,改成0000ff和000000好了有什么 变化呢没有只是也是六个字符长的了这样更好处理好了下一步吧
那我们说的话就是newsd(537)=addwordcolor&cstr(chatroomsn)了
机器人吗?它是这样说的autonewsd(537)=sayscolor&cstr(chatroomsn)
其中的chatroomsn=session("hxf_c_mylocale")
好了,我们说的话中有了我们的房间信息了如何接收呢
在t.asp中
Select Case sift
Case "0","1","2"
中的每一个case中我们都在if判 断中多加一个检测
and mid(sd(i+5),7)=chatroomsn
颜色住信息中多出的房间号现在不处理出没有关系的
javascript解释RGB信息时会自己去除的
如果想也可以是 show(j+5)=left(sd(i+5),6)

好了,现在看起来没有事了我们的确有了不同的房间了只是好象没有入口而已
这样好了你可以自己加我是在hqtchat中另加了一个框架我加在f3的上方你可以自便
<frame src="selectchatroom.asp?chatroomsn=<%=chatroomsn%>" name="chatroomfrm" scrolling="NO" noresize marginwidth="0" marginheight="0">

其中的selectchatroom.asp为
<%Response.Expires=0
mychatroomsn=session("hxf_c_mylocale")
chatroomsn=Request.QueryString("chatroomsn")
%>
<form name=form1>
<select name=chatroomselect onchange='javascript:changechatroom();'>
--<%online=split(trim(application("hxf_c_useronlinename"))," ")
----onlinenum=ubound(online)+1
--%>
<option value='/' <%if chatroomsn=mychatroomsn then Response.Write "selected"%>>
--<%=application("hxf_c_chatroomname")%>/
--<%=onlinenum%>人在线
</option>
<%
set conn=server.CreateObject("adodb.connection")
conn.Open application("hg_connstr"),conn
set rst=server.CreateObject("adodb.recordset")
rst.Open "SELECT ID,username from reginfo where grade>6",conn
do while not (rst.EOF or rst.BOF)
--chatroomsn=rst("ID")
--chatroomname=rst("username")
--useronline=application("hxf_c_useronlinename"&chatroomsn)
--onlinelist=split(trim(useronline)," ")
--onlinelistnum=ubound(onlinelist)+1
%>
--<option value="<%=chatroomsn%>/<%=chatroomname%>" <%if cstr(chatroomsn)=mychatroomsn then Response.Write "selected"%>>
--<%=chatroomname%>/
--<%=onlinelistnum%>人在线
--</option>
<%
--rst.MoveNext
loop
%>
</select>
</form>
<script language=javascript>
function changechatroom()
{
--var chatroomoption=document.form1.chatroomselect.value;
--var chatroomoptmp;
--var chatroomsn;
--var chatroomname;
--chatroomtmp=chatroomoption.indexOf('/');
--chatroomsn=chatroomoption.substring(0,chatroomtmp);
--chatroomname=chatroomoption.substring(chatroomtmp+1);
--top.t.location.href="about:blank";
--top.d.location.href="about:blank";
--top.f3.location.href="changechatroom.asp?chatroomsn="+chatroomsn+"&chatroomname="+chatroomname;
}
</script>

好了现在让我们写changechatroom.asp吧
更简单了,得到房间名称和房间号先
mychatroomsn=Request.QueryString("chatroomsn")
chatroomname=Request.QueryString("chatroomname")
然后在下面加入exitchat.asp中的部分,当然是已经更改过了的exitchat.asp呀
去掉最后对close.asp的调用
最后加入新的处理方法
<script language=javascript>
var mychatroomsn="<%=mychatroomsn%>";
var chatroomname="<%=chatroomname%>";
top.location.href='jhchat.asp?chatroomsn='+mychatroomsn+'&chatroomname='+chatroomname;
</script>
这样就行了不是很简单吗

新的房间在线名单不会更新
你可以用refresh 和settimeout 但是我想也许不会有多少人关心,而总是重读数据库并不是个好的主意如果你要用 refresh的话我建议是三分钟

事实上这样的房间只有六级的人能开如果你的服务器再的足够好,你可以让每个人都能开当然你应该在限定了房间数量之后实时更新,这样会更有趣些,所有的房间都没有新的管理功能?正是因为这样我才只让六级的人才能有自己的房间,当然他不在线就!!


好象就这样了,应该没有错了,自己做了呀
事实上我已经调试通过了,也算了我给大家的元宵礼物吧  

上一篇:得到表中字段属性代码 人气:11766
下一篇:页面之间传递元素的办法 人气:9862
浏览全部的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐