最新ASP.NET+XML无刷新聊天室演示。支持无限个房间。想要源代码的请进。
演示地址:
http://www.lostinet.com/jancchat/
要得到原代码
请直接输入email地址,和密码进行注册和登陆,
并且在里面至少要发10条聊天记录。~~~
然后使用email地址跟帖。
我晚上发源代码。。
如果没有在聊天室内注册email作为名字,我是没有办法群发邮件的。。~~
问题点数:11、回复次数:95Top
1 楼lostinetdotcom(又一个MVP竞争者)回复于 2003-06-04 10:57:55 得分 0
我参与的问题
Top
2 楼Naola2001(摆地摊.Net)回复于 2003-06-04 11:06:56 得分 11
laraok@hotmail.com
刚还在看了Top
3 楼thetuxedo(Matrix Reloaded)回复于 2003-06-04 11:12:30 得分 0
jh@meyence.comTop
4 楼dragon_wangzhen(wz)回复于 2003-06-04 11:19:06 得分 0
dragon_wangzhen@sina.comTop
5 楼babytong(你是天上乌鸦飞啊飞|我是地上黄狗追呀追)回复于 2003-06-04 11:32:00 得分 0
wkedward60@hotmail.comTop
6 楼LinYeCunFu(耕夫)回复于 2003-06-04 11:35:14 得分 0
正在聊呢,呵呵
linyecunfu@sina.comTop
7 楼leebons(李)回复于 2003-06-04 11:47:57 得分 0
leebons@sina.com
谢谢
我想问一下是不是采用了webservice技术,我以前也做个类似的聊天室。Top
8 楼zmfly(苍鹰)回复于 2003-06-04 11:57:24 得分 0
zmfly_168168@sina.com
你好人一个啊
谢谢Top
9 楼comezxn(全球人)回复于 2003-06-04 11:57:25 得分 0
comezxn@163.com,很好,我需要Top
10 楼114(蝶中蝶)回复于 2003-06-04 11:59:54 得分 0
mgwms@sina.comTop
11 楼chenghz(chenghz)回复于 2003-06-04 12:02:06 得分 0
cheng_h_z@hotmail.comTop
12 楼panzh10(阿潘)回复于 2003-06-04 12:02:48 得分 0
panzh10@sohu.com
多谢了Top
13 楼ikier(ikier)回复于 2003-06-04 12:11:50 得分 0
iky@vip.sina.com
多谢!Top
14 楼xiaolin0987(清水)回复于 2003-06-04 12:16:40 得分 0
xiaolin0987@sohu.com
多谢了!Top
15 楼2003rainbow(111)回复于 2003-06-04 12:26:09 得分 0
outdachong@163.com
瀏覽Top
16 楼crodling(十方)回复于 2003-06-04 12:28:24 得分 0
blebs@sohu.com
我也想要
谢谢
Top
17 楼sunhp(小李飞刀)回复于 2003-06-04 12:29:52 得分 0
huapingsun@eyou.com
谢谢Top
18 楼glassbottle()回复于 2003-06-04 12:30:34 得分 0
glassbottle@yeah.net
多谢!Top
19 楼lpc007(搞事棍 -_-!!)回复于 2003-06-04 12:36:47 得分 0
l.pc@163.netTop
20 楼empathy(披着羊皮的狼)回复于 2003-06-04 12:39:17 得分 0
luxuiang@163.net
Top
21 楼lostinetdotcom(又一个MVP竞争者)回复于 2003-06-04 12:42:37 得分 0
谢谢大家的支持。
Top
22 楼lostinetdotcom(又一个MVP竞争者)回复于 2003-06-04 13:08:28 得分 0
先帖服务器核心的代码:
剩下的今天晚上提供下载。
using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Xml;
using System.Configuration;
namespace ChatWeb
{
public class ChatService
{
static SqlDataAdapter CreateAdapter(string roomname)
{
SqlDataAdapter sda=new SqlDataAdapter("select * from MsgLog where dt>@dt and room=@rn",ConfigurationSettings.AppSettings["ConnectionString"]);
sda.SelectCommand.Parameters.Add("@dt",DateTime.Now.Subtract(TimeSpan.FromMinutes(30)));//30分钟内
sda.SelectCommand.Parameters.Add("@rn",roomname);
new SqlCommandBuilder(sda);
return sda;
}
//保证时间值唯一
static object dtnextsyncobject=new object();
static DateTime dtnext=DateTime.Now;
static DateTime NewDateTime()
{
lock(dtnextsyncobject)
{
DateTime dt=DateTime.Now;
while(dt==dtnext)
dt=DateTime.Now;
dtnext=dt;
return dtnext;
}
}
static Hashtable OnlineRooms=new Hashtable();
static Hashtable GetOnlineTable(string roomname)
{
lock(OnlineRooms.SyncRoot)
{
object o=OnlineRooms[roomname];
if(o!=null)
return (Hashtable)o;
Hashtable ht=new Hashtable();
OnlineRooms.Add(roomname,ht);
return ht;
}
}
static DataSet MessageTables=new DataSet();
static DataTable GetMessageTable(string roomname)
{
lock(MessageTables)
{
if(MessageTables.Tables.Contains(roomname))
return MessageTables.Tables[roomname];
CreateAdapter(roomname).Fill(MessageTables,roomname);
return MessageTables.Tables[roomname];
}
}
[Serializable] public class Online
{
public string username;
public DateTime dt;
}
static public string GetRoomName(int roomid)
{
object oroom=HttpContext.Current.Application["Room:"+roomid];
if(oroom==null)
throw(new Exception("房间已经不存在"));
return oroom.ToString();
}
static public string GetUserName()
{
object ouser=HttpContext.Current.Session["UserName"];
if(ouser==null)
throw(new Exception("没有登陆"));
return ouser.ToString();
}
static public int InitRoom()
{
object oroom=HttpContext.Current.Session["RoomName"];
if(oroom==null)
throw(new Exception("没有登陆"));
return oroom.GetHashCode();
}
static public DateTime GetDateTime()
{
return DateTime.Now;
}
static public Online KeepOnline(int roomid)
{
string username=GetUserName();
Hashtable ht=GetOnlineTable(GetRoomName(roomid));
lock(ht.SyncRoot)
{
Online ol;
object o=ht[username];
if(o!=null)
ol=(Online)o;
else
{
ol=new Online();
ol.username=username;
ht.Add(username,ol);
}
ol.dt=DateTime.Now;
return ol;
}
}
static public void Leave(int roomid)
{
string username=GetUserName();
Hashtable ht=GetOnlineTable(GetRoomName(roomid));
lock(ht.SyncRoot)
{
if(ht.ContainsKey(username))
ht.Remove(username);
}
}
static public ArrayList ListOnline(int roomid)
{
ArrayList al=new ArrayList();
Hashtable ht=GetOnlineTable(GetRoomName(roomid));
DateTime dtExpires=DateTime.Now.Subtract(TimeSpan.FromMinutes(2)); //两分钟过期
lock(ht.SyncRoot)
{
foreach(Online ol in ht.Values)
{
if(ol.dt>dtExpires)
al.Add(ol);
}
}
return al;
}
[Serializable] public class ChatMessage
{
public DateTime dt;
public string dtticks;
public string room;
public string sendfrom;
public string sendto;
public bool stealthily;
public string message;
}
static public ArrayList ListMessage(int roomid,string strdtticks)
{
//strdtticks用字符串来通信,是因为客户端不支持那么大的数
Int64 dtticks=Int64.Parse(strdtticks);
//限定时间范围
DateTime dtmin=DateTime.Now.Subtract(TimeSpan.FromMinutes(30));//30分钟内
if(dtticks<dtmin.Ticks)
dtticks=dtmin.Ticks;
ArrayList al=new ArrayList();
string roomname=GetRoomName(roomid);
string username=GetUserName();
DataTable table=GetMessageTable(roomname);
lock(table)
{
int count=table.Rows.Count;
for(int i=count-1;i>=0;i--)
{
DataRow dr=table.Rows[i];
DateTime rdt=(DateTime)dr["dt"];
//如果记录时间很早
if(rdt.Ticks<=dtticks)
break;
ChatMessage cm=new ChatMessage();
cm.sendfrom=dr["sendfrom"].ToString();
cm.sendto=dr["sendto"].ToString();
cm.stealthily=(bool)dr["stealthily"];
//如果是悄悄的
if(cm.stealthily)
{
//不是发送方,也不是接收方
if(cm.sendfrom!=username&&cm.sendto!=username)
continue;
}
cm.dt=rdt;
cm.dtticks=cm.dt.Ticks.ToString();
cm.room=dr["room"].ToString();
cm.message=dr["message"].ToString();
al.Add(cm);
}
}
al.Reverse();
return al;
}
//Send
static public void SendMessage(int roomid,string msg,string sendto,bool stealthily)
{
string roomname=GetRoomName(roomid);
DataTable table=GetMessageTable(roomname);
lock(table)
{
DataRow dr=table.NewRow();
dr["dt"]=NewDateTime();
dr["room"]=roomname;
dr["sendfrom"]=GetUserName();
if(sendto==null||sendto.Length==0)
dr["sendto"]=DBNull.Value;
else
dr["sendto"]=sendto;
dr["stealthily"]=stealthily;
dr["message"]=msg;
table.Rows.Add(dr);
//更新到数据库中,用于记录,可选
try
{
CreateAdapter(roomname).Update(table);
}
catch(Exception)
{
table.RejectChanges();
throw;
}
if(table.Rows.Count>200)
{
//移除并不是删除
for(int i=0;i<20;i++)
table.Rows.RemoveAt(0);
}
}
}
}
}Top
23 楼coo_key(coo_key)回复于 2003-06-04 13:11:58 得分 0
看了,不错地说。Top
24 楼ewoodfish()回复于 2003-06-04 13:15:29 得分 0
ewoodfish@sina.com
强烈需要中..........Top
25 楼wolve(祝你生活愉快)回复于 2003-06-04 13:19:50 得分 0
dongdong5644_cn@sina.comTop
26 楼gengwei80(书生)回复于 2003-06-04 13:21:40 得分 0
gengwei_80@163.com
Top
27 楼paodiaole(跑掉了)回复于 2003-06-04 13:22:36 得分 0
lifax@sohu.comTop
28 楼strongwood(strongwood)回复于 2003-06-04 13:36:22 得分 0
tempest@163.netTop
29 楼xlzhu(xlzhu)回复于 2003-06-04 13:39:32 得分 0
szxlzhu@163.comTop
30 楼caosheng(草圣)回复于 2003-06-04 13:46:08 得分 0
caosheng12345@sina.comTop
31 楼xwy2258588(答案)回复于 2003-06-04 13:57:03 得分 0
xwy2258588@hotmail.com
先谢谢了Top
32 楼sumanden(心头慌,打中张)回复于 2003-06-04 13:58:24 得分 0
学习
c_zc@21cn.comTop
33 楼abcynic(门外汉)回复于 2003-06-04 14:08:10 得分 0
abcynic@hotmail.comTop
34 楼chenqianliang(忠实朋友)回复于 2003-06-04 14:14:35 得分 0
为什么你的聊天室不提供注销功能呀
想要退出怎么办呀
直接闭关窗口吗
那你怎么判断用户有没有离开呀
我也要原代码,谢谢
我的邮箱:chenql163@163.comTop
35 楼sinokid(小智)回复于 2003-06-04 14:18:10 得分 0
能否给我一份源程序!! 谢谢!
gateschan@vip.sina.comTop
36 楼shang515(天天向上)回复于 2003-06-04 14:19:17 得分 0
主啊!俺昨天就已经去过你的聊天室发言了……
shang_515@163.comTop
37 楼fzqk9(天域)回复于 2003-06-04 14:21:27 得分 0
好人一个啊
谢谢
fjrj999@163.comTop
38 楼scong(歪弓射貂)回复于 2003-06-04 14:21:30 得分 0
cshen@iipc.zju.edu.cn
thxTop
39 楼OutcastXP(敲木鱼的老和尚)回复于 2003-06-04 14:23:29 得分 0
OutcastXP@tom.com
不错.....Top
40 楼shang515(天天向上)回复于 2003-06-04 14:24:48 得分 0
我发现一个问题:发言内容如果全是字母或数据在显示的时候就不会换行,并且多余的也显示不出来了。Top
41 楼xrll()回复于 2003-06-04 14:26:52 得分 0
版主好心!!Top
42 楼conan22(conan)回复于 2003-06-04 14:32:02 得分 0
我也要
谢谢
conan22@citiz.netTop
43 楼Microconquer(西祠小气)回复于 2003-06-04 14:33:12 得分 0
有点小问题,明明在线,在线列表说已经不在线了。Top
44 楼Microconquer(西祠小气)回复于 2003-06-04 14:34:35 得分 0
xicixiaoqi_yhn@sina.comTop
45 楼lostinetdotcom(又一个MVP竞争者)回复于 2003-06-04 14:45:06 得分 0
这个问题应该是更新了。~~~Top
46 楼killerwc(刀耐特混混)回复于 2003-06-04 14:48:54 得分 0
学习!
killerwc@bluewave.com.cnTop
47 楼CloneCenter(复制中心)回复于 2003-06-04 15:03:11 得分 0
学习Top
48 楼luckysusan(海闊天空)回复于 2003-06-04 15:12:41 得分 0
chb241@sina.comTop
49 楼xiahouwen(武眉博<活靶子.NET>)回复于 2003-06-04 15:19:08 得分 0
huobazi@183.ha.cnTop
50 楼TCat(蚊子)回复于 2003-06-04 15:26:19 得分 0
不知这会是真发还是来做广告的
cuixianwen@sohu.comTop
51 楼cgmx(风向标)回复于 2003-06-04 15:28:55 得分 0
cc.c@163.comTop
52 楼qiweiyong(qwy)回复于 2003-06-04 15:32:03 得分 0
qiweiyong1129@163.comTop
53 楼hitler45(Jery)回复于 2003-06-04 15:32:13 得分 0
hitler45@163.comTop
54 楼cchinasp(netbig)回复于 2003-06-04 15:35:22 得分 0
huang_guozhi@163.comTop
55 楼wuyu1980(乌鱼子)回复于 2003-06-04 15:37:01 得分 0
wuyun1980@sina.com
多谢多谢Top
56 楼wuyu1980(乌鱼子)回复于 2003-06-04 15:39:05 得分 0
wuyun1980@sina.com
谢谢,一定给我一份啊Top
57 楼seagull2(不停的想)回复于 2003-06-04 15:45:24 得分 0
txxzl@hotmail.com thanksTop
58 楼elliot(!逸轩)回复于 2003-06-04 15:46:53 得分 0
yxchen@sina.comTop
59 楼kuile(开心就好)回复于 2003-06-04 15:47:18 得分 0
xjiang@wz.zj.cn
谢谢,正为这个发愁呢Top
60 楼xrascal(横刀夺爱)回复于 2003-06-04 15:48:56 得分 0
xrascal@163.com
Top
61 楼upto(阿球|Mobile Smart Client)回复于 2003-06-04 15:56:07 得分 0
itfun@163.comTop
62 楼sxd0081(~~~~~~~~~~~~~~~~~)回复于 2003-06-04 15:56:13 得分 0
sxd0081@yahoo.com.cnTop
63 楼sxd0081(~~~~~~~~~~~~~~~~~)回复于 2003-06-04 15:56:48 得分 0
sxd0081@hotmail.comTop
64 楼lpeng(about:blank)回复于 2003-06-04 15:56:49 得分 0
lpeng168@hotmail.com thanks so muchTop
65 楼Chlaiee(三千晴空)回复于 2003-06-04 15:59:19 得分 0
chlaiee@21cn.com
谢谢Top
66 楼flygen7711(小水泡)回复于 2003-06-04 16:01:05 得分 0
mayanbo@tsinghua.org.cnTop
67 楼weki(小李)回复于 2003-06-04 16:02:12 得分 0
yesyes@21cn.com
记得MAIL一份给我呀.不错不错,要向楼主学习学习Top
68 楼lnok(这也会过去)回复于 2003-06-04 16:03:38 得分 0
lnokoo@163.net
我要Top
69 楼Jorcks2002(Jorcks2002)回复于 2003-06-04 16:12:08 得分 0
jorcks2002@hotmail.com
我也要,向楼主学习Top
70 楼llkk(可靠力量)回复于 2003-06-04 16:34:36 得分 0
谢谢
lileinlp@163.comTop
71 楼yigeyigeyige(怡戈)回复于 2003-06-04 17:34:03 得分 0
upTop
72 楼swufe_cjy(沐风)回复于 2003-06-04 17:44:27 得分 0
cjy99@swufe.edu.cnTop
73 楼wolf_z(鹰)回复于 2003-06-04 17:49:31 得分 0
eagle@online.cq.cnTop
74 楼lostinetdotcom(又一个MVP竞争者)回复于 2003-06-04 21:25:49 得分 0
根据数据库的记录:邮件发到下列地址中。~~
99558480@163.com
abc1666@sohu.com
abcynic@hotmail.com
aqute@sohu.com
bestcomy@263.net
blebs@sohu.com
bonnie_101@163.com
breakerking@chinaren.com
c_zc@21cn.com
caiweiling@hotmail.com
caosheng12345@sina.com
chb241@sina.com
cheng_h_z@hotmail.com
chenql163@163.com
cjy99@swufe.edu.cn
cnc2003@163.net
code@szweb.net
CodeGhost@21cn.com
comezxn@163.com
coo_key@163.com
cuixianwen@sohu.com
darkzhan@sina.com
eagle@online.cq.cn
edianicom@hotmail.com
elf_1@163.net
epp@163.com
ewen@sina.com
fjrj999@163.com
forbrave@hotmail.com
gang_mu@163.com
ganghao@hotmail.com
gengwei_80@163.com
ghost_sea@371.net
glassbottle@yeah.net
hitler45@163.com
huang_guozhi@163.com
huapingsun@eyou.com
huobazi@183.ha.cn
iky@vip.sina.com
ilyou2000@21cn.com
jh@meyence.com
jorcks2002@hotmail.com
kuile@163.com
lancer@apjcorp.com
latahu@our168.com
leebons@sina.com
lif123@ah163.com
lileinlp@163.com
linlimin98@163.com
linyecunfu@sina.com
lnokoo@163.net
lonelystar777@citiz.net
lostinet@lostinet.com
monkeynet@163.com
nkdzc@eyou.com
OutcastXP@tom.com
outdachong@163.com
panzh10@sohu.com
public_zz@163.com
py@mail.eestart.com
qiweiyong1129@163.com
ray.zh@163.com
rlin@163.com
rose_su@sina.com
ruanwenhua@fjcd.com.cn
sdwjw23@163.com
shang_515@163.com
sxd0081@hotmail.com
sxd0081@yahoo.com.cn
szxlzhu@163.com
tempest@163.net
to_nel@hotmail.com
tolhui@sohu.com
tyx_66@tom.com
w.hua@ynmail.com
willie_xu@263.net
wkedward60@hotmail.com
wuyun1980@sina.com
www.5inet.net@163.com
xicixiaoqi_yhn@sina.com
xjiang@wz.zj.cn
yesyes@21cn.com
yhjiu99@163.com
young@esilk.net
yqdeng@tom.com
yxchen@sina.com
zhabohai@homail.com
zhangyutian@163.net
zmfly_168168@sina.com
zxh_tj@163.net
zyandzl@sohu.com
Top
75 楼webcopy(wcmaster)回复于 2003-06-04 21:46:15 得分 0
webcopymaster@hotmail.com
太长了,不能在聊天登陆窗口注册。
来晚了,晚了也顶!!!Top
76 楼eileendl(默默)回复于 2003-06-04 21:51:48 得分 0
来晚了,还有分吗?
eileenmail@eyou.comTop
77 楼zlf_jack(风云剑客)回复于 2003-06-04 21:57:05 得分 0
还有吗?
zlf_jack@hotmail.comTop
78 楼ChinaLyp(刀客陆)回复于 2003-06-04 22:03:49 得分 0
好人啊!!
lyp0520@163.com
谢谢!Top
79 楼jjstar(北人)回复于 2003-06-04 22:11:16 得分 0
打个标Top
80 楼namelb(是大海吗)回复于 2003-06-04 23:18:09 得分 0
namelb@163.com
Top
81 楼windinwing(潇笑)回复于 2003-06-04 23:37:16 得分 0
getdns@vip.sina.comTop
82 楼exee(左边风景)回复于 2003-06-05 08:18:47 得分 0
天
还给么??
wdj503@163.comTop
83 楼chenwenfeng2002()回复于 2003-06-05 08:25:45 得分 0
给我一份,好吗?
lkr9@qingdaonews.comTop
84 楼qiweiyong(qwy)回复于 2003-06-05 08:29:17 得分 0
楼主,我收到的是乱码,能不能给个地方,把程序打个压缩包,让我们自己去下载。
qiweiyong1129@163.comTop
85 楼efyrose(散步的鱼)回复于 2003-06-05 08:47:23 得分 0
efyrose@163.com
学习学习Top
86 楼oar(草做的桨)回复于 2003-06-05 09:00:00 得分 0
还有我
grassoar@hotmail.comTop
87 楼lonelystar777(孤星之泪)回复于 2003-06-05 09:05:08 得分 0
<script src="Chat.Janc.Ashx?type=script"><!--/**/--></script>
你这样调用服务器的方法,怎么实现的?哪里可以找到相关的资料啊?Top
88 楼Jouzen()回复于 2003-06-05 09:11:49 得分 0
jouzen@163.net
谢谢Top
89 楼zhyx21century(什么都不懂)回复于 2003-06-05 09:16:10 得分 0
我要。。。。
bati1992@163.netTop
90 楼ghy3()回复于 2003-06-05 09:18:16 得分 0
blue-ghy3@sohu.com
好好学习!!Top
91 楼kuile(开心就好)回复于 2003-06-05 09:18:49 得分 0
不好意思我也收到的是乱码,那位同仁有收到好的,麻烦发给我
xjiang@wz.zj.cnTop
92 楼bsky8021(世外桃源)回复于 2003-06-05 09:19:19 得分 0
我也要,guang8021@sina.comTop
93 楼lostinetdotcom(又一个MVP竞争者)回复于 2003-06-05 09:20:02 得分 0
转移到:
http://expert.csdn.net/Expert/topic/1877/1877890.xml?temp=.5658533
to: lonelystar777(孤星之泪)
那是仿照WebService做的。
但是它简化客户端的调用方法。。
在客户端脚本调用主要是两种:
同步调用
var result=ServerObj.MethodName(arg1,arg2);
异步调用:
var ocall=ServerObj.MethodName.CreateCall(OnResult,OnError);
ocall.context1=11;
ocall(arg1,arg2);
function OnResult(result,ocall)
{
}
function OnError(exception,ocall)
{
}Top
94 楼abcynic(门外汉)回复于 2003-06-05 19:03:46 得分 0
没有收到啊Top
95 楼panzh10(阿潘)回复于 2003-06-06 07:34:09 得分 0
是乱码呀Top



