大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> XML专区 -> 用Flash和XML来构造一个聊天室

用Flash和XML来构造一个聊天室

时间: 2021-07-31 作者:daque

点击这边载入源文献前方的教程咱们引见了flash与xml贯串运用的道理以及一个乒坛的实行,底下咱们连接贯串flash与xml来实行一个大略的谈天室,有在线谈天、在线职员名单、在线功夫、大略的处置操纵等功效。按照须要在此普通上稍作窜改,就不妨实行一个功效比拟完美的谈天室了。一、道理用flash和xml来结构谈天室,跟径直用flash和asp来结构谈天室的基础道理是一律的。都是先在flash端发送一个xml乞求到效劳器端,而后等候从效劳器端的xml归来值,当班值日归来flash端后,证明所归来的xml串,按照相映的值做相映的操纵。在flash局部,用到的重要都是xml串的结构和sendandload()因变量的操纵。在asp局部,重要用到了global.asa文献和application()属性,先设置几个application东西,而后将要维持的实质放在application东西中,要用的功夫,径直从application东西中取即是了。底下就按程序一个一个来实行谈天室的功效,每一个引见的实质都分为“传播的xml”、“flash局部”、“asp局部”三局部。二、登岸登岸即是将用户名和暗号用xml方法发送给效劳器端,效劳器端将考证的截止用xml方法归来。a、传播的xml1、乞求报文<login><username>用户名</username><pwd>暗号</pwd></login>2、相应报文<login><usrename name="用户名" right="权力">用户名</username></login>b、flash局部1、在flash mx 2004中兴建一个flash文献,树立场景的第一帧的帧标签为“login”,并在actionscript面板上减少语句:stop();2、在第一帧的场景顶用文本东西拉两个文本框,典型都为“input type”,变量名var辨别树立为“username”、“userpwd”,这是用来输出用户名跟暗号的。3、兴建一个button并拖到第一帧的场景中,摆放场所如图1所示。并在这个button的actionscript面板中减少如次语句:

用flash和xml来构造一个聊天室图1

on (release) {if (length(_root.username) == 0) { //解释1_root.username = "guest";} else if (length(_root.userpwd) == 0) { //解释2_root.username = "guest";}loginxml = new xml(); //解释3loginelement = loginxml.createelement("login"); //解释4// name nodenameelement = loginxml.createelement("username"); //解释5namenode = loginxml.createtextnode("name"); //解释6namenode.nodevalue = _root.username;nameelement.appendchild(namenode); //解释7// pwd nodepwdelement = loginxml.createelement("pwd"); //解释8pwdnode = loginxml.createtextnode("pwd");pwdnode.nodevalue = _root.userpwd; pwdelement.appendchild(pwdnode); //解释9loginelement.appendchild(nameelement); //解释10loginelement.appendchild(pwdelement);loginxml.appendchild(loginelement); //解释11xmlrepley = new xml(); //解释12xmlrepley.onload = onloginreply; //解释13function onloginreply(success) {if (success) {if (xmlrepley.firstchild.firstchild.attributes.right == "1") { //解释14_root.gotoandplay("main");} else {_root.username = "登岸波折";}}}loginxml.sendandload("http://localhost/xmlchat/login.asp", xmlrepley); //解释15}解释1:查看输出框顶用户名的长度,如为空,则默许为guest。解释2:查看输出框中暗号的长度。解释3:兴建一个xml东西,这是用来发送给效劳器端的。解释4:创造一个login结点东西。解释5:创造一个username结点东西,提防不许径直在element东西中安置文本实质,要在text node东西中本领安置文本实质。简直不妨拜见flash扶助文献中相关xml.createelement()和xml.createtextnode() 中的实质。解释6:创造一个text node东西,用来安置username结点的文本实质。解释7:将创造的text node结点插入到username结点东西中。解释8:辨别创造一个pwd结点东西和text node。解释9:将text node结点插入到pwd结点东西中。解释10:将username结点东西插入到login结点东西中,将pwd结点东西插入到login结点东西中。解释11:将login结点东西插入到所创造的xml东西中,进而结构一个完备的xml东西。提防这边在建立xml东西时,是从最内里发端建立的。解释12:兴建一个xml东西,这边是用来安置接受到的xml东西的。解释13:树立接受xml东西的相应因变量,当效劳器端归来xml东西的功夫触发。解释14:确定归来的xml东西中的结点属性能否适合诉求。解释15:运用sendandload()因变量,将flash端的xml东西发送给效劳器端,并接受从效劳器端归来的xml东西。c、asp局部1、兴建一个文献,定名为global.asa,输出如次实质:<script language="vbscript" runat="server">sub application_onstartapplication("visitornum")=0application("visitorname")=""application("allcansee")=""end sub</script>2、兴建一个asp文献,定名为login.asp,输出如次的实质:<%set myfileobject = server.createobject("scripting.filesystemobject") ‘解释1set mytextfile = myfileobject.createtextfile("g:\写稿\flashxmlchat\source\login.xml", 8, true) ‘解释2mytextfile.writeline(request.form) ‘解释3 set objdom = server.createobject("microsoft.xmldom") ‘解释4objdom.loadxml(request.form) ‘解释5set objname = objdom.documentelement.selectsinglenode("//login/username") ‘解释6username = objname.text ‘解释7set objpwd = objdom.documentelement.selectsinglenode("//login/pwd") ‘解释8pwd = objpwd.textrigh = "-1"'确定set conn=server.createobject("adodb.connection") ‘解释9conn.open "provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("/xmlchat/xmlchat.mdb") ‘解释10set rs=server.createobject("adodb.recordset") ‘解释11strsql="select * from userinfo where username = '" & username & "' and pwd = '" & pwd & "'" ‘解释12rs.open strsql,conn, 1, 1 if not(rs.bof and rs.eof) then ‘解释13application("visitornum") = application("visitornum") + 1 application("visitorname") = application("visitorname") & username & "," & rs("id") & ";" ‘解释14righ = rs("right")tempstr= username & " login......"application("allcansee") = application("allcansee") & tempstr ‘解释15else righ = "0"end ifrs.close ‘解释16conn.close'归来response.write("<login><usrename name=""" & username & """ right=""" & righ & """>" & username & "</username></login>") ‘解释17%>解释1:运用filesystemobject组件创造一个文献东西,将通信进程中传递的货色写在文献内里,简单调节和测试。解释2:提防按照本质须要窜改文献的路途。解释3:把request.form是传递进入的一切实质都写在文献内里,在效劳器端留住调节和测试陈迹。不妨用日记形式进一步完备此功效。解释4:创造一个xml东西。不妨在ms xml包中找到更多相关xml操纵的消息。解释5:经过loadxml()因变量,导出flash端传递进入的xml方法字符串。解释6:创造username结点的东西。解释7:博得username结点的实质。解释8:创造pwd结点的东西,博得pwd结点的实质。解释9:创造一个数据库connection汇合。解释10:创造一个数据库的ado贯穿,这边用到的是access 2000数据库,数据库的方法见反面的附录,请提防数据库的寄存场所。解释11:创造一个数据库recordset汇合。解释12:按照博得的用户名和暗号,结构一个sql字符串。解释13:确定查问截止能否为空。解释14:将用户名和id号增添到application("visitorname")东西中。解释15:将登岸消息增添到application("allcansee")东西中。解释16:封闭数据库贯穿,开释资源。解释17:径直结构一个xml字符串,并经过write因变量写到flash端。三、发送发送局部的基础道理是从flash端发送xml方法的谈天实质到效劳器端,在效劳器端将谈天实质增添到application("allcansee")东西中,并将窜改后的application("allcansee")东西的实质用xml方法归来到flash端。a、传播的xml1、乞求报文<send><username>用户名</username><content>发送实质</content></send>2、相应报文<send><result sflag="true" scontent="谈天室表露的实质">用户名</result></send>b、flash局部1、在主场景的第5帧中增添要害帧,将此帧定名为“main”,在帧的action面板中减少底下的语句:now = new date(); //解释1starttime = now.gettime();stop();解释1:这是为了在底下计划在线功夫用的。2、在主场景中拉一个文本框,属性树立如图2所示。

用flash和xml来构造一个聊天室图2

3、在主场景main帧中减少一个button,表露的实质为“发送”。在button的action面板上头减少如次语句:on (release) {if (length(_root.txtsend) == 0) { //解释1_root.txtsend = "实质为空";}sendxml = new xml(); //解释2sendelement = sendxml.createelement("send"); //解释3// name nodenameelement = sendxml.createelement("username"); //解释4 namenode = sendxml.createtextnode("name"); //解释5namenode.nodevalue = _root.username;nameelement.appendchild(namenode); //解释6// content nodecntelement = sendxml.createelement("content"); //解释7cntnode = sendxml.createtextnode("cnt"); //解释8cntnode.nodevalue = _root.txtsend;cntelement.appendchild(cntnode); //解释9sendelement.appendchild(nameelement); //解释10sendelement.appendchild(cntelement); sendxml.appendchild(sendelement); //解释11xmlsendrepley = new xml(); //解释12xmlsendrepley.onload = onsendreply; //解释13function onsendreply (success) { if (success) {if (xmlsendrepley.firstchild.firstchild.attributes.sflag == "true") { //解释14_root.txtcontent = xmlsendrepley.firstchild.firstchild.attributes.scontent; //解释15}else {_root.txtcontent = "贯穿超时……";}}}sendxml.sendandload("http://localhost/xmlchat/send.asp", xmlsendrepley); //解释16}解释1:确定发送的实质能否为空。解释2:创造一个用来发送的xml东西。解释3:创造一个send结点东西。解释4:创造一个username结点东西。解释5:创造一个text node东西,用来寄存用户名。 解释6:将创造的text node东西增添到username结点东西中。解释7:创造一个content结点东西。解释8:创造一个text node东西,用来寄存要发送的实质。解释9:将创造的text node东西增添到content结点东西中。解释10:将创造的username和content东西增添到send结点东西中。解释11:将创造的send结点东西增添到send东西中。解释12:创造一个用来接受的xml东西。解释13:树立接受xml东西的相应因变量。解释14:确定从效劳器归来的值,按照确定截止做相映的操纵。解释15:将谈天室的实质表露出来。解释16:运用sendandload()因变量,将flash端的xml东西发送给效劳器端,并接受从效劳器端归来的xml东西c、asp局部兴建一个空缺文献,定名为send.asp,其实质如次:<%set myfileobject = server.createobject("scripting.filesystemobject") ‘解释1set mytextfile = myfileobject.createtextfile("g:\写稿\flashxmlchat\source\login.xml", 8, true)mytextfile.writeline(request.form) ‘解释2set objdom = server.createobject("microsoft.xmldom") ‘解释3objdom.loadxml(request.form) ‘解释4set objname = objdom.documentelement.selectsinglenode("//send/username") ‘解释5username = objname.textset objcnt = objdom.documentelement.selectsinglenode("//send/content") ‘解释6content = objcnt.texttempstr= username & " say: " & content & "..." application("allcansee") = application("allcansee") & tempstr ‘解释7'归来response.write("<send><result sflag=""true"" scontent=""" & application("allcansee") & """>aa</result></send>") ‘解释8%>解释1:运用filesystemobject组件创造一个文献东西,将通信进程中传递的货色写在文献内里,简单调节和测试。解释2:把request.form是传递进入的一切实质都写在文献内里,在效劳器端留住调节和测试陈迹。解释3:创造一个xml东西。解释4:经过loadxml()因变量,导出flash端传递进入的xml方法字符串。解释5:创造username结点的东西,博得相映实质。解释6:创造content结点的东西,博得相映实质。解释7:将从flash端发送过来的实质增添到application("allcansee")东西中。解释8:径直结构一个xml字符串,并经过write因变量写到flash端。四、表露谈天实质和在线职员名单表露谈天实质的基础道理是从flash端发送要表露谈天实质的xml乞求,在效劳器端将application("allcansee")的实质按xml方法发送给flash端,在flash端证明和表露出来。表露在耳目数名单的基础道理是在flash端发送表露在耳目数名单的xml乞求,效劳器端将application("visitorname")东西的实质按xml方法发送给flash端,在flash端证明和表露出来。a、传播的xml1、乞求报文<refresh><username>用户名</username></refresh>2、相应报文<refresh><result cflag="true" ccontent="谈天实质" talker="在线职员名单">用户名</result></refresh>b、flash局部1、在主场景中拉一个文本框,属性树立如图3所示。

用flash和xml来构造一个聊天室图3

2、从组件库内里采用list组件,在场景中拉一个list,定名为“talkerlist”。此时场景中的构造该当如图4所示。

用flash和xml来构造一个聊天室图4

3、在主场景main帧中减少一个button,表露的实质为“革新”。在button的action面板上头减少如次语句:on (release) {refreshxml = new xml(); //解释1refreshelement = refreshxml.createelement("refresh"); //解释2// name nodenameelement = refreshxml.createelement("username"); //解释3namenode = refreshxml.createtextnode("name"); //解释4namenode.nodevalue = _root.username;nameelement.appendchild(namenode); //解释5refreshelement.appendchild(nameelement); //解释6refreshxml.appendchild(refreshelement);xmlrefreshrepley = new xml(); //解释7xmlrefreshrepley.onload = onrefreshreply; //解释8function onrefreshreply(success) {if (success) {if (xmlrefreshrepley.firstchild.firstchild.attributes.cflag == "true") { //解释9_root.txtcontent = xmlrefreshrepley.firstchild.firstchild.attributes.ccontent; //解释10strtalker = xmlrefreshrepley.firstchild.firstchild.attributes.talker;_root.talkerlist.removeall(); //解释11if (strtalker.length>0) { //解释12talkerarray = new array(); //解释13temparray = new array();talkerarray = strtalker.split(";"); //解释14for (i=0; i<talkerarray.length-1; i++) { //解释15temparray = talkerarray[i].split(","); //解释16_root.talkerlist.additem(temparray[0], temparray[1]); //解释17}}} else {_root.txtcontent = "贯穿超时……";}}}refreshxml.sendandload("http://localhost/xmlchat/refresh.asp", xmlrefreshrepley); //解释18}解释1:创造一个用来发送的xml东西。解释2:创造一个refresh结点东西。解释3:创造一个username结点东西。解释4:创造一个text node东西,用来寄存用户名。解释5:将创造的text node东西增添到username结点东西中。解释6:将创造的username东西增添到refresh结点东西中。解释7:创造一个用来接受的xml东西。解释8:树立接受xml东西的相应因变量。解释9:确定从效劳器归来的值,按照确定截止做相映的操纵。解释10:将谈天室的实质表露出来。解释11:将场景中的下拉列表中的实质清空。解释12:确定从效劳器端归来的在线名单能否为空。解释13:创造两个数组,用来操纵在线用户名单。解释14:挪用string的split因变量,将分隔后的string生存到数组中。解释15:轮回读取数组内里的string,连接分隔。解释16:挪用string的split因变量,将分隔后的string生存到数组中。解释17:将分隔后博得的用户名和id号,都增添加入景中的下拉列表中。解释18:运用sendandload()因变量,将flash端的xml东西发送给效劳器端,并接受从效劳器端归来的xml东西。c、asp局部兴建一个文献,定名为refresh.asp,增添如次实质:<% set myfileobject = server.createobject("scripting.filesystemobject") ‘解释1set mytextfile = myfileobject.createtextfile("g:\写稿\flashxmlchat\source\login.xml", 8, true) ‘解释2mytextfile.writeline(request.form) ‘解释3set objdom = server.createobject("microsoft.xmldom") ‘解释4objdom.loadxml(request.form) ‘解释5set objname = objdom.documentelement.selectsinglenode("//refresh/username") ‘解释6username = objname.text'归来response.write("<refresh><result cflag=""true"" ccontent=""" & application("allcansee") & """ talker=""" & application("visitorname") & """>aa</result></refresh>") ‘解释7%>解释1:运用filesystemobject组件创造一个文献东西,将通信进程中传递的货色写在文献内里,简单调节和测试。解释2:创造一个文献。解释3:把request.form是传递进入的一切实质都写在文献内里,在效劳器端留住调节和测试陈迹。解释4:创造一个xml东西。解释5:经过loadxml()因变量,导出flash端传递进入的xml方法字符串。解释6:创造username结点的东西,博得相映实质。解释7:按照谈天室实质和在线职员名单结构一个xml字符串,并经过write因变量写到flash端五、表露在线功夫flash中的功夫功效仍旧充满宏大,单凭flash端就不妨计划在线功夫。连接地用暂时功夫去减记载下来的发端功夫,并表露出来,即是在线功夫了。a、flash局部1、在主场景中拉一个文本框,属性树立如图5所示。

用flash和xml来构造一个聊天室图5

2、按“ctrl + f8”兴建一个空缺的movie clip,将此clip拖加入景中,并在此clip的action面板上头减少如次语句(提防是在场景中的clip上头,不是在clip内里):onclipevent (load) {timedate = new date();}onclipevent (enterframe) { //解释1mytime = timedate.gettime(); //解释2_root.txttime = "您共在线 " + math.round((math.ceil((mytime - _root.starttime)/1000)/60)) + " 秒钟"; //解释3delete timedate; //解释4timedate = new date(); //解释5}解释1:当clip的帧从新播放的功夫触发。解释2:博得暂时功夫。 解释3:将统计所得的秒变换因素钟,并表露出来。解释4:简略暂时的功夫东西。解释5:从新结构一个功夫东西,如许就不妨连接的博得最新的功夫。六、处置员权力谈天室中,处置功效是必不行少的,这边以大略的“踢人”功效为例来证明一下。a、传播的xml1、乞求报文<kick><id>要踢的用户名和id串</id></kick>2、相应报文<refresh><result kflag="true" ccontent="谈天室实质" talker="在线职员列表">用户名</result></refresh>b、flash局部1、在场景中兴建一个button,表露的实质为“踢人”,在button的action面板上头减少如次语句:on (release) {kickxml = new xml(); //解释1sendelement = kickxml.createelement("kick"); //解释2// id nodenameelement = kickxml.createelement("id"); //解释3namenode = kickxml.createtextnode("id"); //解释4namenode.nodevalue = _root.talkerlist.selecteditem.label + "," +_root.talkerlist.selecteditem.data + ";"; //解释5nameelement.appendchild(namenode); //解释6sendelement.appendchild(nameelement); kickxml.appendchild(sendelement); //解释7xmlkickrepley = new xml(); //解释8xmlkickrepley.onload = onkickreply; //解释9function onkickreply (success) { if (success) {if (xmlkickrepley.firstchild.firstchild.attributes.kflag == "true") { //解释10strtalker = xmlkickrepley.firstchild.firstchild.attributes.talker; //解释11_root.talkerlist.removeall(); //解释12if (strtalker.length>0) { //解释13talkerarray = new array();temparray = new array();talkerarray = strtalker.split(";");for (i=0; i<talkerarray.length-1; i++) {temparray = talkerarray[i].split(",");_root.talkerlist.additem(temparray[0], temparray[1]); //解释14}}}else {_root.txtcontent = "贯穿超时……";}}}kickxml.sendandload("http://localhost/xmlchat/kick.asp", xmlkickrepley); //解释15解释1:创造一个用来发送的xml东西。解释2:创造一个kick结点东西。解释3:创造一个id结点东西。解释4:创造一个text node东西,用来寄存id。解释5:将场景中的下拉列表中的值赋给text node东西。解释6:将创造的text node东西增添到username结点东西中。解释7:将创造的kick东西增添到kick结点东西中。解释8:创造一个用来接受的xml东西。解释9:树立接受xml东西的相应因变量。解释10:确定从效劳器归来的值,按照确定截止做相映的操纵。解释11:博得从效劳器端归来的用户列表。解释12:清空场景中的下拉列表。解释13:确定从效劳器端归来的用户列表能否为空。解释14:将从效劳器端归来的用户列表分隔,并增添加入景中的下拉列表中。解释15:运用sendandload()因变量,将flash端的xml东西发送给效劳器端,并接受从效劳器端归来的xml东西。c、asp局部兴建一个文献,定名为kick.asp,在文献中增添如次实质:<% set myfileobject = server.createobject("scripting.filesystemobject") ‘解释1set mytextfile = myfileobject.createtextfile("g:\写稿\flashxmlchat\source\login.xml", 8, true) ‘解释2mytextfile.writeline(request.form) ‘解释3set objdom = server.createobject("microsoft.xmldom") ‘解释4objdom.loadxml(request.form) ‘解释5set objname = objdom.documentelement.selectsinglenode("//kick/id") ‘解释6oldid = objname.text'处置踢人举措dim i,j,num ‘解释7i = 1j = 1num = 0do while j<>0j = instr(i,application("visitorname"), ";", 1)if j<>0 thennum = num + 1str = mid(application("visitorname"), i, j-i)temppos = instr(1, str, ";", 1) + 1usernum = mid(str, temppos)if usernum = oldid theni = i -1j = j + 1application("visitorname") = mid(application("visitorname"),1,i) & mid(application("visitorname"),j)exit doend ifend ifi = j + 1loop'归来response.write("<refresh><result kflag=""true"" ccontent=""" & application("allcansee") & """ talker=""" & application("visitorname") & """>aa</result></refresh>") ‘解释8%>解释1:运用filesystemobject组件创造一个文献东西,将通信进程中传递的货色写在文献内里,简单调节和测试。解释2:创造一个文献。解释3:把request.form是传递进入的一切实质都写在文献内里,在效劳器端留住调节和测试陈迹。解释4:创造一个xml东西。解释5:经过loadxml()因变量,导出flash端传递进入的xml方法字符串。解释6:创造id结点的东西,博得相映实质。解释7:这几步是处置“踢人”的举措,在这边不过大略地把要踢的用户从在线用户名单中简略,更庄重的“踢人”不妨把要踢的用户的ip地方写数据库中,只到处置员解开为止。解释8:径直结构一个xml字符串,并经过write因变量写到flash端。七、faq1、开拓情况引见体例的开拓情况为win 2k + flash mx 2004 + iis 6.0 + ie 6.0 + 登记本。在iis中所树立的假造目次的称呼为xmlchat。2、波及的数据库体例用到的数据库为access 2000,数据库中惟有一个用户表userinfo,表中的字段为:id、username、pwd、right。点击这边载入源文献

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.