【c#、Red5】关于c#如何使用FluorineFx与Red5通信及相关
来源:互联网 发布:python 判断主机存活 编辑:程序博客网 时间:2024/06/07 05:37
啊呀,今天登录CSDN的时候,收到几位网友的私信,大体都是询问关于如何使用FluorineFx这个库的,之前我是有计划写教程的,可能由于其他事情耽误,然后忘记了,见谅~
好了,直接转入正题,首先,这个库是做什么的呢?简单来说,就是c#的一个用于使用Rtmp协议进行通信的库,具体的用法其实不难,如果你要是有flex的经验的话,上手就会很快的。
我这里使用的是Red5服务器作为Rtmp协议的服务器,简单实现一个调用服务器方法,回调方法,共享对象发送信息等功能仅供大家参考,如果还有不明白的或者想深入研究的话,我们可以深入交流一下哦~~~~(基佬奏凯!!!!!!!!)
首先,我们需要下载dll,我已经上传到我的资源库里面了,大家可以从这个资源库进行下载:http://download.csdn.net/download/z3237109/9281349
下载之后,导入c#项目,添加这5个dll的引用。
然后是使用方式,假设,我们网络上端的服务器(Red5)地址是:10.10.17.105,然后我们在服务器上先架好webapp,用Java添加我们用于测试的让客户端调用的服务器方法:
public void SendMsgToTeacher(Object msg) {}传入的参数可以是Object,也可以是String,这个需要flex的基本知识,当flex与Red5进行传参的时候,大体上都可以转化为String型的,也就是说,当我们用c#给Red5传参的时候,如果只是传递一个“测试数据”这样的字符,这个函数还可以变成这样:
public void SendMsgToTeacher(String msg) {}至于服务器反向调用客户端的方法,我们需要下面的代码:
if (TeacherConn != null) {if (TeacherConn instanceof IServiceCapableConnection) {//添加的新学生,标示“+”((IServiceCapableConnection) TeacherConn).invoke("RefreshUserList", new Object[] { "z", "1", "2"},null);}}<span style="font-family: Arial, Helvetica, sans-serif;"> </span>TeacherConn是在Red5上用Java声明的IConnection类型的值,当我们写的c#端客户端连接上Red5之后,在Red5的登录函数里面(Application类connect函数,我是用的1.0.7版本的Red5,如果你使用的是1.0.0之前的版本,可能登录的函数是roomJoin),我们能获取到同样是IConnection类型的c#客户端链接,这个时候,我们就需要保存一下这个链接,这里可以赋值给TeacherConn,方便我们后面直接调用(TeacherConn是全局变量哦~)。
RefreshUserList是我们在c#端声明的一个函数,用于服务器直接调用的函数,null其实是一个回调函数,就是方便我们查看调用客户端函数之后的状态。
截至现在,Red5服务器端的基本主要代码就完事了,接下来就是重头戏了,c#端的代码编写。
引用这几个dll之后,我们可以声明NetConnection类型的对象了:
Red5NetConnectio = new NetConnection(); Red5NetConnection.Client = this; Red5NetConnection.ObjectEncoding = ObjectEncoding.AMF0; Red5NetConnection.OnConnect += new ConnectHandler(RedNetConnection_OnConnect); Red5NetConnection.NetStatus += new NetStatusHandler(Red5NetConnection_NetStatus); Red5NetConnection.OnDisconnect += new DisconnectHandler(RedNetDisConnection_OnConnect); Red5NetConnection.Connect("rtmp://10.10.17.105:1935/red5Server/测试", "参数1", "参数2", "参数3", "参数4");四不四和flex的用法很像呀?
第二行,设置Client为this是为了让服务器调用客户端函数的时候能够指向当前类中的函数,编码方式选用AMF0,然后再注册几个关键的网络状态回调函数,就可以调用connent进行连接了(后面的参数只是举个例子,具体大家可以自行设置,不过要与接收的服务器端关于登录参数的数量、类型匹配上哦)。
接下来链接共享对象(我写在RedNetConnection_OnConnect回调函数中):
Red5SharedObject = RemoteSharedObject.GetRemote("CeShiSharedObject", Red5NetConnection.Uri.ToString(), false); Red5SharedObject.OnConnect += new ConnectHandler(sharedObject_OnConnect); Red5SharedObject.OnDisconnect += new DisconnectHandler(sharedObject_OnDisconnect); Red5SharedObject.NetStatus += new NetStatusHandler(sharedObject_NetStatus); Red5SharedObject.Sync += new SyncHandler(sharedObject_Sync); Red5SharedObject.Connect(Red5NetConnection);网络回调函数设置完毕之后,connent咱们的Red5NetConnection,共享对象也就设置成功了。
对于回调函数的代码,接收回调状态的类型值为NetStatusEventArgs,我们如何获取状态代码呢?还是举个例子:
private void Red5NetConnection_NetStatus(object sender, NetStatusEventArgs e) { string level = e.Info["level"] as string; if (level == "error") { Trace.WriteLine("Error: " + e.Info["code"] as string); } if (level == "status") { switch (e.Info["code"] as string) { case "NetConnection.Connect.Success": break; default: break; } Trace.WriteLine("Status: " + e.Info["code"] as string); }}上面的代码我只写了success的状态例子,像其他的状态,大家可以具体情况,具体写,嘿嘿~~~~
然后是c#调用远程服务器端的方法,这里需要注意一下,如果想要传递object类型的对象的话,要使用dll里面的ASObject类型:
ASObject obj = new ASObject(); obj.Add("type", "1"); obj.Add("ip", "1"); obj.Add("name", "1"); obj.Add("code", "1"); obj.Add("no", "1");
Red5NetConnection.Call("SendMsgToTeacher", null, new object[] { obj });null还是调用的回调函数,这里与前文一样,传的空,如果实际需要,也可以写一个回调函数进来。
如果服务器端的参数接收不是Object,是String,这样我们就使用:
Red5NetConnection.Call("SendMsgToTeacher", null, "123"});如果我们客户端用String,服务器端用Object的话,服务器能接收到吗?
答案是可以!!只不过样子就变了,假设我们传递的是“123”,服务器用Object接,那么服务器接收到的是String,值是“{123}”,数组啊!!!!!!!!跟登录传参好像,有木有!!!
对于服务器调用客户端方法,写法上与java是一样滴,如果是object类型的,或者是接收从flex端传递过来的多参数、object等对象,c#端参数要使用ASObject接收哦~
写到这里,大家是不是发现用法和写法都与flex很像?嘿嘿,当作flex用就可以了,像共享对象Send消息,同步共享对象,都与flex是一样的。
妥了~就先写到这里吧,有什么疑问,大家可以联系我哦~~~吼吼吼!!!!!!!!!!!!!
- 【c#、Red5】关于c#如何使用FluorineFx与Red5通信及相关
- 【c#、Red5】关于c#如何使用FluorineFx与Red5通信及相关
- 如何使用 Red5 插件创建 Red5 项目?
- 如何使用 Red5 插件创建 Red5 项目?
- 如何使用 Red5 插件创建 Red5 项目? .
- Red5安装与使用
- red5与flex通信 HashMap
- red5
- red5
- Red5
- red5
- 使用Red5创建 red5项目
- as3与red5通信---学习一
- as3与red5通信---学习二
- as3与red5通信---学习三
- Flex客户端与Red5通信示例
- Flex客户端与Red5通信示例
- Windows下Red5安装与使用入门
- 淘宝MySql的问题解决
- 前端开发面试题之 JavaScript
- CDialog中创建CView窗口
- [leetcode] 393. UTF-8 Validation 解题报告
- Mybatis步步进阶(二)——SQL的基本配置与执行
- 【c#、Red5】关于c#如何使用FluorineFx与Red5通信及相关
- Ubuntu Linux 安装后,建立嵌入式开发环境
- Minidwep-gtk字典 破 WPA
- jQuery的事件,选择器,h5的表单
- nginx 自定义带参数模块
- tomcat结合nginx使用小结
- 三大WEB服务器(apache lighttpd nginx) 对比分析
- 前端开发面试题之 HTML
- good explanation of __read_mostly, __init, __exit macros