ASP实现多人聊天室(可显示在线人数、总人数、在线用户名、所有用户名)

本程序搭建在IIS上,使用asp语言编码。

阅读本文首先要掌握的知识:

ASP、VBScript基本语法,Session和Application对象的概念。

本程序分为5个文件,分别为index.asp,chat.asp,input.asp,exit.asp,main.asp,Global.asa
在这里插入图片描述

注:使用Global.asa时要创建应用程序而不是虚拟目录。在这里插入图片描述
本程序的功能为实现多人聊天,可选择不同的字体和颜色进行发送。同时显示在线人数、总人数、在线用户名、所有用户名。(用户名为难点)。

本文对记录用户名的实现做以详细介绍。
首先asp中不同页面的变量是不能够相互传递的,可以用Application和Session来实现变量的传递。而Application记录所有用户的信息,Session记录单一用户的信息,二者结合即可记录在线用户名和所有用户名。

实现方式:

Global.asa:

<Script language="VBScript" runat="server">
	Sub Application_Onstart
		Dim all_un(100), online_un(100)   '存储用户名
		for i=0 to 99
			all_un(i)=""
			online_un(i)=""  '初始化
		next

		Application.lock
		Application("all_un") = all_un
		Application("online_un") = online_un
		Application("all") = 0    'all_un下标
		Application("online") = 0   'online_un下标
		Application("onlinen") = 0    '在线人数   注意:在线人数不等于online_un的下标
		Application.Unlock
	End Sub
	'进入index.asp时Session便已加载,但此时用户未登录,故不能在此时写逻辑代码
	Sub Session_OnEnd
		Dim online_un, online
		online_un = Application("online_un")
		online = Session("now")
		online_un(online) = ""      '如果退出则将当前用户下标所处的online_un设置为空字符
		Application.LOCK
		Application("online_un") = online_un
		
		Application("onlinen") = Application("onlinen") - 1 '如果退出则在线人数减一
		Application.Unlock

	End Sub
</Script>

index.asp:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
	<meta charset="utf-8">
	<title>登录</title>
	<%
		Session.Timeout=2 
		IF Session("user") <> "" THEN   '如果是从exit.asp过来的则Session("user")不为空,将此Session重置
			Session("user") = ""  
			Session.Abandon   '废除session 
		END IF
		Session("flag")=0          '用于记录是否登录,便于在chat.asp中判断
	%>
</head>
<body>
	<form action="chat.asp" method="POST">
		昵称:
		<input type="text" name="name">
		<input type="submit" name="login" value="登录">
	</form>
</body>
</html>

chat.asp:

<%
		Dim all_un, all, online_un, online,name
		all = Application("all")
		online = Application("online")
		IF Session("flag")=0 THEN         '如果是从index.asp过来的则flag为0,执行以下代码
			name = Request("name")
			Application.lock
			Application("all") = Application("all") + 1
			Application("online") = Application("online") + 1
			Application("onlinen") = Application("onlinen") + 1
			Application.Unlock
			Session("user") = name
			all_un = Application("all_un")
			online_un = Application("online_un")
			IF online_un(online) = "" THEN          
				online_un(online) = name      
				Application.lock
				Application("online_un") = online_un
				Application.unlock
				Session("now") = online  '记录当前用户的下标
			END IF
			IF all_un(all) = "" THEN
				all_un(all) = name
				Application.lock
				Application("all_un")=all_un
				Application.unlock
			END IF
			Session("flag")=1     '用户登记之后则flag设置为1,当刷新时便不会重新登记用户信息
		END IF
	%>
		<div class="message">
			<iframe src="main.asp"></iframe>
		</div>
		<div class="data">
			<p>
				当前在线人数:<%=Application("onlinen")%>
				<br>
				<%for i=0 to Application("online")%>
				<%=Application("online_un")(i)%>
				<%next%>
				<br>
				总人数:<%=Application("all")%> 
				<br>
				所有用户名:
				<%for i=0 to Application("all")%>
				<%=Application("all_un")(i)%>
				<%next%>
			</p>
		</div>
		<div class="input">
			<iframe src="input.asp"></iframe>
		</div>
</body>

input.asp:

<body>
	<%
		Dim user
		user = Session("user")
		str = Application("message")
	%>
	<form>
		昵称:<%=user%>发言:<input type="text" name="message">
		
		<input type="radio" name="color" value="red"></input>
		<input type="radio" name="color" value="blue"></input>
		<input type="radio" name="color" value="green">绿</input>
		<br>
		<input type="radio" name="font" value="黑体">黑体</input>
		<input type="radio" name="font" value="宋体">宋体</input>
		<input type="radio" name="font" value="微软雅黑">微软雅黑</input>
		<br>
		<input type="submit" name="submit" value="发送">
		<a href="exit.asp" target="_parent">exit</a>
	</form>
	<%
		IF Request("message") <> "" Then
		str = str & "<span style='color:"& Request("color") &";font-family:" & Request("font")& "'>"& user & ":" & Request("message") & Date & "</span><br>"        
		 '简单的字符串拼接
		Application.lock
		Application("message") = str
		Application.unlock
	End If
	%>
</body>
</html>

main.asp:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
	<title></title>
	<meta charset="utf-8">
	<meta http-equiv="refresh" content="2">
</head>
<body>
	<%
		Dim message
		message = Application("message")
	%>
	<p><%=message%></p>
	
</body>
</html>

exit.asp:

<%
	Response.Redirect "index.asp"
%>

总结:Application负责记录总体数据,Session负责记录单个用户的数据,虽然这样实现起来很麻烦,但能加深对这两个概念的理解。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值