Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)


 



Flex,Fms3系列文章导航

  1. ​Flex,Fms3相关文章索引​


 

本篇是视频聊天,会议开发实例系列文章的第1篇,该系列所有文章链接如下: 

1.了解

关于Flex和Fms3的解释可以看

 

2.开发准备Flex的开发工具(ide):Flex builder 3的安装可以看

Fms3

adobe官方站提供了最大10个连接数的免费开发版(零售版为4500美元) 

实在找不到可以留言给我

安装fms3时,一路next ,中间会要你输入序列号,不输入就是免费的开发版,最后安装结束前会要你输入以后进入fms后台管理的账号密码,比较重要,不要乱输。

Flash Player Debug(Flash Player调试版)

在Flex builder 3的Debug模式下调试代码用的,adobe官方站提供了免费下载

 

3.了解SharedObject对象

SharedObject对象聊天室_服务器

一旦sharedObject 对象中的数据(即聊天记录)被任何一个client 所修改,那么fms 会把当前的sharedObject 中的最新聊天记录发送给所有的client (广播),使得client 聊天窗口中显示的数据刷新。

 

4.开始code具体步骤:

(1)fms安装目录下,找到application文件夹,下面已经有2个目录了,不管它,在application再新建一个文件夹test_myApp,这个就相当于我们聊天室服务端工程的根目录了(以后的sharedObject 对象就是存放于此)

(2)启动fms

在安装目录下,找到tools文件夹,点击StartServerService.bat就可以启动fms。该文件夹内还有一个StopServerService.bat是停止fms的

其实启动fms也可以去windows的开始菜单里面,Start Adobe Flash Media Server 3.0.1和Start Flash Media Administration Server 3.0.1

(3)登录fms

在安装目录下,找到fms_adminConsole.swf,点击后,输入安装时填写的用户名和密码,即可登录成功

(4)打开Flex builder 3,建立一个flex project,程序类型是web类型(便于调试)

(5)在主mxml中拖动控件,界面如下:

SharedObject对象聊天室_视频聊天_02

具体代码如下:

<mx:TextArea x="33" y="10" height="159" width="366" id="txt_content"/>

<mx:TextInput x="33" y="177" width="62" id="txt_nickname"/>

<mx:Label x="103" y="179" text="说"/>

<mx:TextInput x="146" y="177" width="185" id="txt_message"/>

<mx:Button x="334" y="177" label="send" id="btn_send"/>

(6)

开始在<mx:Script>

 <![CDATA[

 ]]>

</mx:Script>

标签组内编写代码

导入包和定义变量如下:

import mx.collections.ArrayCollection;

import mx.controls.Alert;

 

private var myNetConnection:NetConnection;

private var serverApp:String ="rtmp://192.168.0.249/test_myApp";

private var talk_so:SharedObject;

myNetConnection :flex 与fms 链接用的对象 

serverApp :定义了fms 服务的地址使用的是rtmp 协议,ip 加上server 工程根目录 

talk_so:fms 下的SharedObject 对象

(7)定义聊天记录对象Message 

package vo

{

 public class Message

 {

  public function Message()

  {

  }

  

  public var nickname:String;

  public var msg:String;

  public var time:Date;

 }

}

所有的聊天记录都是被存放在一个名为msgList 的集合对象中。每条聊天记录,我是专门定义了Message 对象的

(8)定义一个方法,用于交换数组中元素

private function convertArrayCollection(arrNew:ArrayCollection,arrOld:ArrayCollection):void

{

 arrNew.removeAll();

  

 for(var i:int=0;i<arrOld.length ;i++)

 {

  arrNew.addItemAt(arrOld.getItemAt(i),i);

 }

}

(9)定义界面字体大小为12(中文要大小为12才显示得比较清楚),初始方法为init

<mx:Application xmlns:mx="​​http://www.adobe.com/2006/mxml​​" layout="absolute" fontSize="12" creationComplete="init()">

(10)实现init()

private function init():void

{

 btn_send.addEventListener(MouseEvent.CLICK,btnSenClickHandler);

 myNetConnection = new NetConnection();

 myNetConnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); 

 myNetConnection.connect(serverApp);

}

代码说明:

给按钮添加鼠标点击事件btnSenClickHandler

初始化NetConnection

给myNetConnection添加netStatus事件netStatusHandler

(11)实现netStatusHandler

private function netStatusHandler(evt:NetStatusEvent):void

{

 trace(evt.info.code);  //调试代码用

  

 if ( evt.info.code =="NetConnection.Connect.Success" )

 {

  talk_so = SharedObject.getRemote("talk",myNetConnection.uri,true);

  talk_so.addEventListener(SyncEvent.SYNC,talkSoSyncHandler);

  talk_so.connect(myNetConnection);

 }

 else

 {

  Alert.show("链接失败"+evt.info.code);

 }

}

代码说明:

在NetConnection对象报告其状态或错误条件时调度netStatusHandler。 

netStatus 事件包含一个 info 属性,该属性是一个包含事件特定信息(例如,连接尝试成功还是失败)的信息对象。 

如果与fms 连接成功后就开始初始化remote SharedObject 对象

SharedObject.getRemote()说明:

SharedObject.getRemote() 以创建一个在服务器上永久保留的远程共享对象,如电话簿。 每次客户端对共享对象进行更改时,修改后的数据可供当前或以后连接到该对象的所有客户端使用。 如果还在本地永久保留了该对象,并且客户端在未连接到服务器时更改了数据,下次客户端连接到远程共享对象时,则会将数据复制到该对象。 

若要创建远程共享对象,请调用 getRemote(),然后调用 connect() 以将远程共享对象连接到服务器

SharedObject.getRemote()参数说明:

第1个参数:远程共享对象的名称。 该名称可以包含正斜杠 (/);例如,work/addresses 是合法名称。 共享对象名称中不允许使用空格,也不允许使用下面这些字符:     ~ % & \ ; :  " ' , > ? ? #

其实就是SharedObject 对象生成文件的名字,SharedObject 文件的后缀为*.fso ,因此这里生成就是talk.fso ,生成的位置就在test_myApp 下的某个文件夹中。

第2个参数:将存储共享对象的服务器的 URI。 此 URI 必须与传递给 connect() 方法的 NetConnection 对象的 URI 相同。在本程序中就是rtmp://192.168.0.249/test_myApp 

第3个参数:指定共享对象的数据属性的特性是本地永久储存还是远程永久储存。

true,指定只有服务器上的共享对象是永久性的。

false,指定客户端或服务器上的共享对象不是永久性的。false 的话SharedObject 对象是的存放在内存中的,如果test_myApp 这个server 被停止则内存中的SharedObject 对象就被清空。

另一个重要的代码是

talk_so.addEventListener(SyncEvent.SYNC,talkSoSyncHandler);

这是给远程的SharedObject 对象加入同步事件的监听,一旦远程的SharedObject 对象被任何一个client 修改,那么fms 就会把最新版本的SharedObject 对象广播给所有的client ,以达到所有client 数据同步的目的,这样就会触发client 端的SyncEvent.SYNC 事件。client 端只有加入对这一事件的监听才能知道公共的SharedObject 对象被修改了,才能做出反应获得最新版本的信息。

(12)实现talkSoSyncHandler

private function talkSoSyncHandler(evt:SyncEvent):void

{

 txt_content.text="";

 if ( talk_so.data.msgList!=null )

 {

  var tmp:ArrayCollection = new ArrayCollection();

  convertArrayCollection(tmp,talk_so.data.msgList as ArrayCollection);

   

  for(var i:int=0;i<tmp.length ;i++)

  {

   var message:Object = tmp.getItemAt(i);

    

   var fullMsg:String=message.nickname+"在"+message.time.toTimeString()+"说:"+message.msg;

    

   txt_content.text=txt_content.text+fullMsg+"\n";

  }

 }

}

代码说明:

这个回调函数要做的就是把talk. 这个SharedObject 中的msgList 对象取出,然后遍历出里面所有的Message 对象,刷新显示控件显示所有记录。

(13)实现按钮单击代码,发送聊天记录

private function btnSenClickHandler(evt:MouseEvent):void

{

 var arr:ArrayCollection = new ArrayCollection();

  

 if ( talk_so.data.msgList==null )

 {

  arr = new ArrayCollection(); 

 }

 else

 {

  convertArrayCollection(arr,talk_so.data.msgList as ArrayCollection);

 }

  

 var obj:Message = new Message();

 obj.nickname=txt_nickname.text;

 obj.msg=txt_message.text;

 obj.time = new Date();

  

 arr.addItem(obj);

  

 talk_so.setProperty("msgList",arr);

 txt_message.text="";

}

代码说明:

如果SharedObject-talk 中的msgList 不存在(说明你是聊天室的第一位使用者)就新建一个集合对象,然后将Message 对象add 到这个集合中去。 

如果msgList 已经存在了,则获取这个集合对象,把新的聊天记录往后面插入。 

最后使用SharedObject.setProperty("name",value) 这个函数将你更新好的聊天记录列表写入到公共的SharedObject 对象中去即可。

调用setProperty() 以更改数据对象的属性。 服务器将更新这些属性,并调度 sync 事件,并将这些属性发回到连接的客户端。 这就是为什么每个客户端都能看到一样的聊天记录。

(14)运行程序

SharedObject对象聊天室_服务器_03


(15)fms服务器情况

我们可以看到客户端的链接情况和SharedObject情况

SharedObject对象聊天室_sql_04


SharedObject对象聊天室_asp.net_05

(16)代码下载

​javascript:void(0)​

您收到代码后,请回到文章下面留言告之一下!要是没收到,我可以再发!

提供代码是为了互相学习,一起探讨!请大家多交流!

1.要是对代码有什么疑问,可以在文章的评论区留言,我会尽我所能答复您!

2.要是您在运行代码的过程中发现bug,或者是您有什么好的建议和意见,也可以在文章的评论区留言给我,我会及时更正! 


评论区使用提示:

评论区留言(使用高级评论)是可以贴图片的,要是有难以描述的问题,可以贴图片和文字一起说明

谢谢!

 

 


收藏与分享


收藏到QQ书签  添加到百度搜藏 ​​添加到雅虎收藏​​ SharedObject对象聊天室_sql_06  SharedObject对象聊天室_客户端_07


RSS订阅我 ​​什么是RSS?​


​ ​​   ​​ ​​   ​​ ​

​ ​​   ​​ ​​   ​​ ​​   ​​ ​

​ ​​   ​​ ​​   ​​ ​

​ ​​   ​​ ​​   ​​​



评论列表


 




  回复引用

#251楼[楼主] 2010-02-09 08:49 aierong  




引用miss4813:

fms3.5和fms3开始学习版的版本差异导致的?


难道是fms版本的问题?



学习版。只允许10个链接



支持(0)反对(0)








  回复引用

#252楼[楼主] 2010-02-09 08:50 aierong  




引用miss4813:

引用aierong:

引用扬仔:

#244楼[楼主]2009-12-26 08:07 | aierong 

引用扬仔:

luren jis: 我遇到这样一个问题,就是上面的代码我整个调试通了~但是就是在我的服务器端不能创建fso文件~因此,只要客户端一旦提交对话,其他客户端的内容就清空,只有自己客户端看的见说的内容,请问这个问题要怎么解决呢


把setProperty中的ArrayCollection改成Array,String等都可以,就是用ArrayCollection出现以上情况,具体原因不清楚




对了 你的FlashPlayer播放器 什么版本




代码除了IP地址其他的都没改动,FlashPlayer用的是FlashPlayer10



我用的是fb3



楼主,我的也出现和杨仔一样的问题;环境是:fms3.5+flex3



我用的是fms3


支持(0)反对(0)








  回复引用

#253楼 2010-05-06 18:10 xwg  




对不起lz,我下了你的源码,运行时点击发送没反应,过了许久才提示连接失败。然后我把rtmp的URL地址上的192.168.0.249改成了localhost才能发送。但只能是自己跟自己聊。请问如何才能实现不同电脑之间的聊天呢?比如我在本机安装了服务器,我想在另一台电脑上访问本地服务器,然后跟本机聊天。是不是要知道服务器的IP地址和另一台电脑的IP地址?麻烦你讲解一下吧,谢谢!


支持(0)反对(0)








  回复引用

#254楼[楼主] 2010-05-10 11:22 aierong  




引用xwg:对不起lz,我下了你的源码,运行时点击发送没反应,过了许久才提示连接失败。然后我把rtmp的URL地址上的192.168.0.249改成了localhost才能发送。但只能是自己跟自己聊。请问如何才能实现不同电脑之间的聊天呢?比如我在本机安装了服务器,我想在另一台电脑上访问本地服务器,然后跟本机聊天。是不是要知道服务器的IP地址和另一台电脑的IP地址?麻烦你讲解一下吧,谢谢!



搞一个fms服务器即可


支持(0)反对(0)








  回复引用

#255楼 2010-05-13 17:49 suiji  




楼主


我下载的是3.5


我点击StartServerService.bat


里面提示我

服务名无效net.exe start "FMS" 服务名无效

net.exe start "FMSAdmin" 服务名无效


支持(0)反对(0)








  回复引用

#256楼[楼主] 2010-05-27 09:51 aierong  




引用suiji:

楼主


我下载的是3.5


我点击StartServerService.bat


里面提示我

服务名无效net.exe start "FMS" 服务名无效

net.exe start "FMSAdmin" 服务名无效



我当时开发用的是fms3.0学习版

你的fms3.5应该向下兼容的吧


支持(0)反对(0)








  回复引用

#257楼 2010-08-31 08:23 luochaolun  




楼主,给我发份代码吧,谢谢。我的邮箱是yyvok@163.com


支持(0)反对(0)








  回复引用

#258楼 2010-08-31 22:45 181cm  




引用扬仔:

luren jis: 我遇到这样一个问题,就是上面的代码我整个调试通了~但是就是在我的服务器端不能创建fso文件~因此,只要客户端一旦提交对话,其他客户端的内容就清空,只有自己客户端看的见说的内容,请问这个问题要怎么解决呢


我用的环境是fms3.5+flex4出现同样的问题,调试发现talk_so.setProperty("msgList",arr);的第二个参数传String或者例子代码中单个Message对象都没问题,但只要传入ArrayCollection类型就会出现以上问题,并且日志中提示Thu 04:45:34 PM: Assert failed in ..\FlashPlayer6_02_FlashCom\shared_tcserver\tcparser.cpp line 109


很郁闷,到现在还没解决,刚开始学fms就碰到这么头疼的问题。这么多人都出现一样的问题估计是环境支持的事,跟代码好像没太大关系。


我也出现了这个情况,我用的是fms3.5+flex3。我发现fms控制台里点击talk对象,右上角会出现一个冒号,内容是:failed to make a debug connection,please check that the application in debug model。 问题会不会出在这里?


支持(0)反对(0)








  回复引用

#259楼[楼主] 2010-09-01 16:43 aierong  




引用181cm:

引用扬仔:

luren jis: 我遇到这样一个问题,就是上面的代码我整个调试通了~但是就是在我的服务器端不能创建fso文件~因此,只要客户端一旦提交对话,其他客户端的内容就清空,只有自己客户端看的见说的内容,请问这个问题要怎么解决呢


我用的环境是fms3.5+flex4出现同样的问题,调试发现talk_so.setProperty("msgList",arr);的第二个参数传String或者例子代码中单个Message对象都没问题,但只要传入ArrayCollection类型就会出现以上问题,并且日志中提示Thu 04:45:34 PM: Assert failed...



我当时开发用的是fms3.0学习版

和flex3


支持(0)反对(0)








  回复引用

#260楼 2010-10-21 10:54 underwing  




楼主你好, 我把源码下载后, 还需要在sharedObjects面板下 看不talk对象! 这个是怎么回事啊?


支持(0)反对(0)








  回复引用

#261楼[楼主] 2010-11-27 08:27 aierong  




引用underwing:楼主你好, 我把源码下载后, 还需要在sharedObjects面板下 看不talk对象! 这个是怎么回事啊?



不明白你的意思


支持(0)反对(0)








  回复引用

#262楼 2010-11-29 11:24 underwing  




引用aierong:

引用underwing:楼主你好, 我把源码下载后, 还需要在sharedObjects面板下 看不talk对象! 这个是怎么回事啊?



不明白你的意思


不好意思,我表达的不够清楚! 

是这样的 源码下载后, 在flash builder中运行起来,然后在 fms服务器的管理flash中 看不到sharedObjects对象! 

环境是 flex4和fms3


支持(0)反对(0)








  回复引用

#263楼 2010-12-04 15:17 sunbeamact  




博主,您好!代码貌似下不下来,麻烦发一份给luosanbi@hotmail.com,谢谢!


支持(0)反对(0)








  回复引用

#264楼 2010-12-04 15:51 sunbeamact  




下下来了,谢谢!


支持(0)反对(0)








  回复引用

#265楼 2010-12-17 11:22 xiaoxin3q  




楼主发一份给我谢谢。我的邮箱 xiaoxin3q@163.com


支持(0)反对(0)








  回复引用

#266楼[楼主] 2010-12-19 16:08 aierong  




引用underwing:

引用aierong:

引用underwing:楼主你好, 我把源码下载后, 还需要在sharedObjects面板下 看不talk对象! 这个是怎么回事啊?



不明白你的意思


不好意思,我表达的不够清楚! 

是这样的 源码下载后, 在flash builder中运行起来,然后在 fms服务器的管理flash中 看不到sharedObjects对象! 

环境是 flex4和fms3



情仔细检查看看


支持(0)反对(0)








  回复引用

#267楼[楼主] 2010-12-19 16:10 aierong  




引用sunbeamact:博主,您好!代码貌似下不下来,麻烦发一份给luosanbi@hotmail.com,谢谢!



可以下载的,你再试试看


支持(0)反对(0)








  回复引用

#268楼[楼主] 2010-12-19 16:10 aierong  




引用sunbeamact:下下来了,谢谢!



谢谢


支持(0)反对(0)








  回复引用

#269楼[楼主] 2011-02-13 15:07 aierong  




引用xiaoxin3q:楼主发一份给我谢谢。我的邮箱 xiaoxin3q@163.com


博文中已经给出了代码下载URL



支持(0)反对(0)








  回复引用

#270楼 2011-03-15 14:56 自由枫  




看了楼主的文章,受益颇多。

我想问一下,这个程序能够实现多人聊天吗,就像QQ群里聊天一样。

我在局域网试了一下,发现只能自己跟自己聊天,看不见别人写的内容


支持(0)反对(0)








  回复引用

#271楼 2011-03-21 14:55 huhuyuyu  




楼主 麻烦把fms和代码发我一下,我的邮箱853757999@qq.com

谢谢....


支持(0)反对(0)








  回复引用

#272楼 2011-04-06 11:32 yjate  




楼主,为什么我运行后,

发了信息别人收不到,并且会把别人原本发的信息给刷了

说了话后,其他人的电脑上不显示,并且刷屏了


环境是builder4和fms4


支持(0)反对(0)








  回复引用

#273楼[楼主] 2011-05-17 19:17 aierong  




引用自由枫:

看了楼主的文章,受益颇多。

我想问一下,这个程序能够实现多人聊天吗,就像QQ群里聊天一样。

我在局域网试了一下,发现只能自己跟自己聊天,看不见别人写的内容


可以多人


支持(0)反对(0)








  回复引用

#274楼[楼主] 2011-05-17 19:17 aierong  




引用huhuyuyu:

楼主 麻烦把fms和代码发我一下,我的邮箱853757999@qq.com

谢谢....



blog里面有下载地址


支持(0)反对(0)








  回复引用

#275楼[楼主] 2011-05-17 19:17 aierong  




引用yjate:

楼主,为什么我运行后,

发了信息别人收不到,并且会把别人原本发的信息给刷了

说了话后,其他人的电脑上不显示,并且刷屏了


环境是builder4和fms4



你是否修改了代码

我是fms3和flex3开发的


支持(0)反对(0)








  回复引用

#276楼 2011-08-11 15:12 无邪兮  




博主,能不能传一份fms的下载地址?

邮箱:jake123.123@163.com

谢谢!


支持(0)反对(0)








  回复引用

#277楼 2011-10-05 08:49 自由枫  




引用aierong:

引用扬仔:

#42楼[楼主]2009-03-02 08:13 | aierong 

--引用-------------------------------------------------- 

luren jis: 我遇到这样一个问题,就是上面的代码我整个调试通了~但是就是在我的服务器端不能创建fso文件~因此,只要客户端一旦提交对话,其他客户端的内容就清空,只有自己客户端看的见说的内容,请问这个问题要怎么解决呢



我也遇到一样一样的问题,第一次用fms就碰壁,郁闷很长时间一直没解决。我用的环境是fms3.5+flex4



奇怪 我...



我的也是这种问题,我用的是FMS3.5+FlashDevelop。把ArrayCollection类换成Array类就好了(方法和属性也要修改哦)


支持(1)反对(0)








  回复引用

#278楼 2011-10-14 16:19 lifengrui  




lifengshurui@163.com

楼主的实例能给发一份吗?最近在研究这个东西!谢谢!


支持(0)反对(0)








  回复引用

#279楼 2011-10-25 16:58 yangqin  




楼主,这个代码是只能在同一个窗口实现共享信息,多窗口的信息共享怎么实现啊?[img]http://bbs.9ria.com/attachment.php?aid=NTY0OTl8ZTQxODU5ODJ8MTMxOTUyNjM5OXwxZjE4TWw1YTNRTjRQRjJ4eEJZbFE5dXcweUhJY3Uxc0dSMVc5Z0J1TkxuTERnVQ%3D%3D&noupdate=yes[/img][img]http://bbs.9ria.com/attachment.php?aid=NTY0OTh8MTA0MjY5NGV8MTMxOTUyNjM5OXwxZjE4TWw1YTNRTjRQRjJ4eEJZbFE5dXcweUhJY3Uxc0dSMVc5Z0J1TkxuTERnVQ%3D%3D&noupdate=yes[/img]


支持(0)反对(0)








  回复引用

#280楼[楼主] 2011-11-16 16:19 aierong  




引用lifengrui:

lifengshurui@163.com

楼主的实例能给发一份吗?最近在研究这个东西!谢谢!


blog 里面有代码


支持(0)反对(0)








  回复引用

#281楼[楼主] 2011-11-16 16:19 aierong  




引用yangqin:楼主,这个代码是只能在同一个窗口实现共享信息,多窗口的信息共享怎么实现啊?[img]http://bbs.9ria.com/attachment.php?aid=NTY0OTl8ZTQxODU5ODJ8MTMxOTUyNjM5OXwxZjE4TWw1YTNRTjRQRjJ4eEJZbFE5dXcweUhJY3Uxc0dSMVc5Z0J1TkxuTERnVQ%3D%3D&noupdate=yes[/img][img]http://bbs.9ria.com/attachment.php?aid=NTY0OTh8MTA0MjY5NGV8MTMxOTUyNjM5OXwxZjE4TWw1...



循环


支持(0)反对(0)








  回复引用

#282楼 2012-04-19 14:03 蔡督察  




楼主,我是一名计算机学生,中等生,有一些java编程基础。毕业设计选了个基于fms的应用。由于之前没接触过flash as , fms 这些方面的知识,现在毕业答辩眼看就要到了,还不知道如何下手。我觉得你这个demo很适合我。我下载了你提供的rar文件。这就是你这个demo的完整源代码吗?还有,看很多网友的留言都是要你发code给他们,这个code和你提供的rar不是一回事儿吗?


支持(0)反对(0)








  回复引用

#283楼[楼主] 2012-06-09 08:42 aierong  




@蔡督察

引用楼主,我是一名计算机学生,中等生,有一些java编程基础。毕业设计选了个基于fms的应用。由于之前没接触过flash as , fms 这些方面的知识,现在毕业答辩眼看就要到了,还不知道如何下手。我觉得你这个demo很适合我。我下载了你提供的rar文件。这就是你这个demo的完整源代码吗?还有,看很多网友的留言都是要你发code给他们,这个code和你提供的rar不是一回事儿吗?



blog 里面有代码下载


支持(0)反对(0)








  回复引用

#284楼 2012-07-09 14:36 zjjatnbu  




博主你好!你在blog中上传的代码是不是只有flex客户端的?那么服务器端的具体java代码能不能提供?

另外,我目前在服务器端不是运用的FMS,我用的开源的red5,不晓得有木有也在做这个哇~~一起交流下~~


支持(0)反对(0)








  回复引用

#285楼[楼主] 2012-09-19 17:18 aierong  




@zjjatnbu

引用博主你好!你在blog中上传的代码是不是只有flex客户端的?那么服务器端的具体java代码能不能提供?

另外,我目前在服务器端不是运用的FMS,我用的开源的red5,不晓得有木有也在做这个哇~~一起交流下~~



博文中已经给出了代码下载URL


支持(0)反对(0)








  回复引用

#286楼 2013-08-23 11:06 zi7guo  




您好,请问fms有没有32位系统用的版本?在官网上貌似只看到了64位的


支持(0)反对(0)








  回复引用

#287楼[楼主] 2013-09-08 18:28 aierong  




@zi7guo

引用您好,请问fms有没有32位系统用的版本?在官网上貌似只看到了64位的



我用的是32位,官网下载

Fms3免费开发版


支持(0)反对(0)








  回复引用

#288楼 2014-08-11 16:46 CrazyPastor  




fms都启动了, 点recodr报51行null


支持(0)反对(0)








  回复引用

#289楼 2014-12-05 18:23 叶落风凌  




楼主你好 我在做实时聊天的时候接受的rtmp视频播放的flashplayer只要是debug版本无论是是桌面还是网页就会直接崩溃 你有没有遇到类似的问题啊?这是我的一个rtmp链接

rtmp://rtmp.aiwaya.cn/yunva/781


支持(0)反对(0)







< Prev123456







 


刷新评论刷新页面返回顶部



发表评论


昵称:




评论内容:


SharedObject对象聊天室_服务器_08 SharedObject对象聊天室_视频聊天_09 SharedObject对象聊天室_sql_10 SharedObject对象聊天室_客户端_11 SharedObject对象聊天室_asp.net_12 SharedObject对象聊天室_客户端_13




 




 注销 订阅评论

[使用Ctrl+Enter键快速提交]




 




 


Copyright ©2014 aierong













Flex,Fms3系列文章导航

  1. Flex,Fms3相关文章索引


 

本篇是视频聊天,会议开发实例系列文章的第1篇,该系列所有文章链接如下: 

javascript:void(0)#sp

1.了解

关于Flex和Fms3的解释可以看

javascript:void(0)archive/2008/12/30/flex1.html

 

2.开发准备Flex的开发工具(ide):Flex builder 3的安装可以看

javascript:void(0)archive/2008/12/26/MyCrack.html

Fms3

adobe官方站提供了最大10个连接数的免费开发版(零售版为4500美元) 

实在找不到可以留言给我

安装fms3时,一路next ,中间会要你输入序列号,不输入就是免费的开发版,最后安装结束前会要你输入以后进入fms后台管理的账号密码,比较重要,不要乱输。

Flash Player Debug(Flash Player调试版)

在Flex builder 3的Debug模式下调试代码用的,adobe官方站提供了免费下载

 

3.了解SharedObject对象

SharedObject对象聊天室_服务器

一旦sharedObject 对象中的数据(即聊天记录)被任何一个client 所修改,那么fms 会把当前的sharedObject 中的最新聊天记录发送给所有的client (广播),使得client 聊天窗口中显示的数据刷新。

 

4.开始code具体步骤:

(1)fms安装目录下,找到application文件夹,下面已经有2个目录了,不管它,在application再新建一个文件夹test_myApp,这个就相当于我们聊天室服务端工程的根目录了(以后的sharedObject 对象就是存放于此)

(2)启动fms

在安装目录下,找到tools文件夹,点击StartServerService.bat就可以启动fms。该文件夹内还有一个StopServerService.bat是停止fms的

其实启动fms也可以去windows的开始菜单里面,Start Adobe Flash Media Server 3.0.1和Start Flash Media Administration Server 3.0.1

(3)登录fms

在安装目录下,找到fms_adminConsole.swf,点击后,输入安装时填写的用户名和密码,即可登录成功

(4)打开Flex builder 3,建立一个flex project,程序类型是web类型(便于调试)

(5)在主mxml中拖动控件,界面如下:

SharedObject对象聊天室_视频聊天_02

具体代码如下:

<mx:TextArea x="33" y="10" height="159" width="366" id="txt_content"/>

<mx:TextInput x="33" y="177" width="62" id="txt_nickname"/>

<mx:Label x="103" y="179" text="说"/>

<mx:TextInput x="146" y="177" width="185" id="txt_message"/>

<mx:Button x="334" y="177" label="send" id="btn_send"/>

(6)

开始在<mx:Script>

 <![CDATA[

 ]]>

</mx:Script>

标签组内编写代码

导入包和定义变量如下:

import mx.collections.ArrayCollection;

import mx.controls.Alert;

 

private var myNetConnection:NetConnection;

private var serverApp:String ="rtmp://192.168.0.249/test_myApp";

private var talk_so:SharedObject;

myNetConnection :flex 与fms 链接用的对象 

serverApp :定义了fms 服务的地址使用的是rtmp 协议,ip 加上server 工程根目录 

talk_so:fms 下的SharedObject 对象

(7)定义聊天记录对象Message 

package vo

{

 public class Message

 {

  public function Message()

  {

  }

  

  public var nickname:String;

  public var msg:String;

  public var time:Date;

 }

}

所有的聊天记录都是被存放在一个名为msgList 的集合对象中。每条聊天记录,我是专门定义了Message 对象的

(8)定义一个方法,用于交换数组中元素

private function convertArrayCollection(arrNew:ArrayCollection,arrOld:ArrayCollection):void

{

 arrNew.removeAll();

  

 for(var i:int=0;i<arrOld.length ;i++)

 {

  arrNew.addItemAt(arrOld.getItemAt(i),i);

 }

}

(9)定义界面字体大小为12(中文要大小为12才显示得比较清楚),初始方法为init

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="init()">

(10)实现init()

private function init():void

{

 btn_send.addEventListener(MouseEvent.CLICK,btnSenClickHandler);

 myNetConnection = new NetConnection();

 myNetConnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); 

 myNetConnection.connect(serverApp);

}

代码说明:

给按钮添加鼠标点击事件btnSenClickHandler

初始化NetConnection

给myNetConnection添加netStatus事件netStatusHandler

(11)实现netStatusHandler

private function netStatusHandler(evt:NetStatusEvent):void

{

 trace(evt.info.code);  //调试代码用

  

 if ( evt.info.code =="NetConnection.Connect.Success" )

 {

  talk_so = SharedObject.getRemote("talk",myNetConnection.uri,true);

  talk_so.addEventListener(SyncEvent.SYNC,talkSoSyncHandler);

  talk_so.connect(myNetConnection);

 }

 else

 {

  Alert.show("链接失败"+evt.info.code);

 }

}

代码说明:

在NetConnection对象报告其状态或错误条件时调度netStatusHandler。 

netStatus 事件包含一个 info 属性,该属性是一个包含事件特定信息(例如,连接尝试成功还是失败)的信息对象。 

如果与fms 连接成功后就开始初始化remote SharedObject 对象

SharedObject.getRemote()说明:

SharedObject.getRemote() 以创建一个在服务器上永久保留的远程共享对象,如电话簿。 每次客户端对共享对象进行更改时,修改后的数据可供当前或以后连接到该对象的所有客户端使用。 如果还在本地永久保留了该对象,并且客户端在未连接到服务器时更改了数据,下次客户端连接到远程共享对象时,则会将数据复制到该对象。 

若要创建远程共享对象,请调用 getRemote(),然后调用 connect() 以将远程共享对象连接到服务器

SharedObject.getRemote()参数说明:

第1个参数:远程共享对象的名称。 该名称可以包含正斜杠 (/);例如,work/addresses 是合法名称。 共享对象名称中不允许使用空格,也不允许使用下面这些字符:     ~ % & \ ; :  " ' , > ? ? #

其实就是SharedObject 对象生成文件的名字,SharedObject 文件的后缀为*.fso ,因此这里生成就是talk.fso ,生成的位置就在test_myApp 下的某个文件夹中。

第2个参数:将存储共享对象的服务器的 URI。 此 URI 必须与传递给 connect() 方法的 NetConnection 对象的 URI 相同。在本程序中就是rtmp://192.168.0.249/test_myApp 

第3个参数:指定共享对象的数据属性的特性是本地永久储存还是远程永久储存。

true,指定只有服务器上的共享对象是永久性的。

false,指定客户端或服务器上的共享对象不是永久性的。false 的话SharedObject 对象是的存放在内存中的,如果test_myApp 这个server 被停止则内存中的SharedObject 对象就被清空。

另一个重要的代码是

talk_so.addEventListener(SyncEvent.SYNC,talkSoSyncHandler);

这是给远程的SharedObject 对象加入同步事件的监听,一旦远程的SharedObject 对象被任何一个client 修改,那么fms 就会把最新版本的SharedObject 对象广播给所有的client ,以达到所有client 数据同步的目的,这样就会触发client 端的SyncEvent.SYNC 事件。client 端只有加入对这一事件的监听才能知道公共的SharedObject 对象被修改了,才能做出反应获得最新版本的信息。

(12)实现talkSoSyncHandler

private function talkSoSyncHandler(evt:SyncEvent):void

{

 txt_content.text="";

 if ( talk_so.data.msgList!=null )

 {

  var tmp:ArrayCollection = new ArrayCollection();

  convertArrayCollection(tmp,talk_so.data.msgList as ArrayCollection);

   

  for(var i:int=0;i<tmp.length ;i++)

  {

   var message:Object = tmp.getItemAt(i);

    

   var fullMsg:String=message.nickname+"在"+message.time.toTimeString()+"说:"+message.msg;

    

   txt_content.text=txt_content.text+fullMsg+"\n";

  }

 }

}

代码说明:

这个回调函数要做的就是把talk. 这个SharedObject 中的msgList 对象取出,然后遍历出里面所有的Message 对象,刷新显示控件显示所有记录。

(13)实现按钮单击代码,发送聊天记录

private function btnSenClickHandler(evt:MouseEvent):void

{

 var arr:ArrayCollection = new ArrayCollection();

  

 if ( talk_so.data.msgList==null )

 {

  arr = new ArrayCollection(); 

 }

 else

 {

  convertArrayCollection(arr,talk_so.data.msgList as ArrayCollection);

 }

  

 var obj:Message = new Message();

 obj.nickname=txt_nickname.text;

 obj.msg=txt_message.text;

 obj.time = new Date();

  

 arr.addItem(obj);

  

 talk_so.setProperty("msgList",arr);

 txt_message.text="";

}

代码说明:

如果SharedObject-talk 中的msgList 不存在(说明你是聊天室的第一位使用者)就新建一个集合对象,然后将Message 对象add 到这个集合中去。 

如果msgList 已经存在了,则获取这个集合对象,把新的聊天记录往后面插入。 

最后使用SharedObject.setProperty("name",value) 这个函数将你更新好的聊天记录列表写入到公共的SharedObject 对象中去即可。

调用setProperty() 以更改数据对象的属性。 服务器将更新这些属性,并调度 sync 事件,并将这些属性发回到连接的客户端。 这就是为什么每个客户端都能看到一样的聊天记录。

(14)运行程序

SharedObject对象聊天室_服务器_03


(15)fms服务器情况

我们可以看到客户端的链接情况和SharedObject情况

SharedObject对象聊天室_sql_04


SharedObject对象聊天室_asp.net_05

(16)代码下载

javascript:void(0)

您收到代码后,请回到文章下面留言告之一下!要是没收到,我可以再发!

提供代码是为了互相学习,一起探讨!请大家多交流!

1.要是对代码有什么疑问,可以在文章的评论区留言,我会尽我所能答复您!

2.要是您在运行代码的过程中发现bug,或者是您有什么好的建议和意见,也可以在文章的评论区留言给我,我会及时更正! 


评论区使用提示:

评论区留言(使用高级评论)是可以贴图片的,要是有难以描述的问题,可以贴图片和文字一起说明

谢谢!

 

 


收藏与分享


收藏到QQ书签  添加到百度搜藏 添加到雅虎收藏 SharedObject对象聊天室_sql_06  SharedObject对象聊天室_客户端_07


RSS订阅我 什么是RSS?


         

             

         

        


东莞.net俱乐部


SharedObject对象聊天室_客户端_21 欢迎您的加入





我的系列文章

A.Sql Server2005 Transact-SQL 新兵器学习 

B.MCAD学习 

C.代码阅读总结 

D.ASP.NET状态管理 

E.DB(数据库) 

F.WAP 

G.WinForm 

H.Flex

我的好文推荐

FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))<视频聊天,会议开发实例8> 

Sql Server2005 Transact-SQL 新兵器学习总结之-总结 

MS SQL数据库备份和恢复存储过程(加强版本) 

sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结) 

ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现) 

WAP开发资料站(最新更新) 

自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现) 

Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结) 

Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法) 

Mcad学习笔记之序列化(2进制和Soap序列 化) 

Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨) 

ASP.NET状态管理之一(概括篇) 

Flex,Fms学习笔记



SharedObject对象聊天室_客户端_22


希望上面提到的知识对您有所提示,同时欢迎交流和指正 

作者:aierong

出处:javascript:void(0)aierong

贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!

本文版权归作者所有,欢迎转载!

原创技术文章和心得,转载注明出处!这也是对原创者的尊重!




 



分类: Flex


标签: Flex builderFlexFmsfms3NetConnectionSharedObjectArrayCollection



绿色通道: 好文要顶 关注我 收藏该文与我联系 SharedObject对象聊天室_asp.net_23



SharedObject对象聊天室_服务器_24

aierong

关注 - 7

粉丝 - 130




 


 


+加关注





2


0


 


(请您对文章做出评价)