C#服务端,Android客户端 开发IM,服务端怎么弄,有没有开源的框架

C#服务端,Android客户端 开发IM,服务端怎么弄,有没有开源的框架,第1张

C#开源项目(国外的还是很多) 一、Ajax框架 Ajax.NET Professional

(AjaxPro)是最先把AJAX技术在微软.NET环境下的实现的AJAX框架之一。它在客户端脚本之上创建代理类来调用服务器端的方法。

MagicAjax.NET是一款在ASP.NET下创建Web页面提供AJAX技术的框架。它使开发人员很容易把AJAX整合到他们的页面而不需要替换ASP.NET控件或自己写javascript脚本代码。

Anthem.NET是为ASP.NET开发环境提供的开源AJAX工具包,它可以运行于ASP.NET 1.1和2.0。

二、工作流(workflow)

Workflow.Net是使用微软.Net技术基于wmfc标准的创建工作流引擎。

NetBPM是JBpm移植到.net平台下的一款开源工作流软件。NetBpm可以很容易和.Net应用程序集成在一起,可以创建,执行和管理工作流程序。 Bpm

Tool支持将业务模型转换成软件模型。业务开发人员可以使用模型驱动的方法设计,实现,执行和跟踪业务流程。因此开发人员能够更容易的关注业务逻辑的变化。

其实微软自己的WPF做WorkFlow也很厉害。

三、文本编辑 FCKeditor是一款功能强大的开源在线文本编辑器(DHTML

editor),它使你在web上可以使用类似微软Word 的桌面文本编辑器的许多强大功能。它是轻量级且不必在客户端进行任何方式的安装。 FreeTextBox

是一个基于 Internet Explorer 中 MSHTML 技术的 ASP.NET 开源服务器控件。这是一款优秀的自由软件(Free

Software),我们可以轻松地将其嵌入到 Web Forms 中实现 HTML 内容的在线编辑,在新闻发布、博客写作、论坛社区等多种 Web

系统中都会有用途。 VietPad是一个功能完整的跨平台的Java/.NET的Vietnamese

Unicode开源文本编辑器。支持打开,编辑,打印,转换,排序,和保存基于文本的Unicode格式的Vietnamese文件。

NetSpell是一款.NET框架下的开源拼写检查引擎。 PPC_edit是一款应用在Pocket PC上的开源文本编辑器,它支持TXT, RTF, HTML,

WordML, DocBook 和 ZIP格式的文件,屏幕上会显示国际标准的软键盘。

四、博客(Blog)

NovaShare是一款Blog引擎,它使你创建基于交互式的web的新闻和论坛网站,很像WonkoSlice或Slashdot。管理员可以发布文章和发起投票,浏览者可以创建用户帐号,发表议论等等。

dasBlog是从BlogX 网上日志引擎发展而来。像Trackback ,Pingback

一样增加许多附加的特征,有完整的Blogger/MovableType

API支持,API注释,完整的Radio-style模板定制,支持Mail-To-Weblog/POP3的附件和内嵌图片,基于WEB的

DHTML,OPML,配置的编辑器。 DotText是一个被使用了数百个blogs的强劲的blog引擎。这是一个N-tiered应用的例子。

tBlogger是一个C#开发的完整的blog网站程序,使用XML配置。

Blog现在可以使用MVC的其他开源项目来构建,这些项目在codeplex上有很多,其中微软自己的就有OXite。

五、系统构建

.NETZ是一款免费开源工具,它可以压缩和打包微软 .NET 框架可执行文件(EXE,

DLL)以使他们更小。更小的可执行文件占用的磁盘空间较少且因为读取文件时对磁盘的访问较少而使读取数度更快。它和PE(portable

executable)打包工具不一样,.NETZ是使用 C# 编写的存粹的 .NET 解决方案。.NETZ可以用来打包几乎每一种 .NET

支持的语言编写的程序。.NETZ支持 .NET EXE 和 非共享(non-shared)的 DLL

文件。压缩过的程序能以相同的方式解压缩这些对最终用户是透明的。 NAntContrib为NAnt提供定制任务的工具。

Prebuild是XML驱动的一款跨平台pre-build工具,使开发人员很容易就可以为IDE和.NET开发工具生成项目或构建文件。它支持 Visual

Studio .NET 2002, 2003, 2005, SharpDevelop, MonoDevelop 和 NAnt。

BusyBeeBuilder是.NET平台下功能强大,易于使用,可扩展的开源构建自动操作工具。 Draco.NET 是 Windows

服务应用程序。它的设计使其容易持续的集成新特性。Draco.NET监视你的源代码储存库。当探测到你的项目有变化时自动重新创建项目并把包含变化列表的创建结果发送到你的Email。

Build Studio为软件的自动构件处理提供了一套完整的解决方案。 CruiseControl.NET是.NET平台下的一款整合服务器。

NAnt类似Apache项目下的Ant,是.Net下的开源构建工具。适用在自动编译.NET应用的场合,如.NET项目的每日构建(nightly

build)。

说老实话,我并不认为系统构建工具的作用真的有那么强大,如果你真的计划做一个很大的项目,且持续开发时间很长,那么你可以使用上面的系统构建工具。

五、图表制作

ZedGraph是C#编写的.NET类库,提供了用户控件和web控件。它可以创建2D的线性图、条形图和饼图。它功能完整且有详细的功能自定义,不过

使用默认的选项就足够好用了。一款类似 PieChart, StackBar, LineChart的C#开源图表组件。

NPlot是一款.NET下的开源图表类库.它值得称道的地方是优雅且灵活的API设计.NPlot包含了Windows Form控件,

ASP.NET控件和一个创建Bitmap图片的类。还有一个可用的GTK#控件。 XSCharting是C#开发的图表组件,提供了多种多样的图表选项。

DaveChart是一个免费的DotNet类库。 NChart 提供了很多值得应用在商业,教育等多个领域的2 D图表。

微软自己已经提供了一个chat绘制控件,也就是原来的dunat,如果那个可以满足你的要求,那么完全没有必要使用上面的。但是如果你需要研究画图,作自己定义的chat,那么这些开源的项目将对你有很大的帮助。

六、聊天系统

Dot Net Chat

server是基于DotNet框架开发的聊天服务器和客户端项目。说老实话,我对这个很感兴趣,有时间,要瞧瞧它的代码是咋实现的。

七、内容管理系统(CMS)

Ludico是C#编写的居于ASP.NET

2.0的Portal/CMS系统。它的模块化设计是你可以按照你希望的使用或开发网站功能。它里面有高级的用户管理,一个所见即所的(WYSIWYG)的编辑器等。

mojoPortal是一款C#开发的面相对象网站框架,它可以运行于Windows的ASP.NET 和GNU/Linux 或Mac OS X的Mono的平台上。

Cuyahoga是C#开发的灵活的CMS / Portal 解决方案。它可以运行于Microsoft .NET 和Mono 平台,支持SQL Server,

PostgreSQL或MySQL作为底层数据库。 Umbraco是一款在.net平台下C#开发的开源内容管理系统,该系统效率,灵活,用户界面都不错。 Kodai

CMS是.NET平台下的一款功能齐全的内容管理系统。 Rainbow项目是一款使用Microsoft’’s

ASP.NET和C#技术开发的有丰富功能的开源内容管理系统。 NkCMS是使用ASP.net和Sql server 2000开发的内容管理系统。

Amplefile是一款内容管理系统,是.Net环境下的windows应用程序,使用了.Net remoting.

Go.Kryo是一个用ASP.NET(C#).NET 实现的简单的内容管理系统,后台数据库使用Microsoft SQL Server 。 ndCMS是

ASP.net

(C#)下的一个内容管理系统。它提供了用户管理,文件管理,一个WYSIWYG编辑器,模板管理,拼写检查和内置的http压缩。ndCMS的目标是提供一个简单而快速的方式部署.Net站点以节省你的时间和金钱。

这些开源的CMS我试用了几个,说真的,拿来研究可以,要真的实施,估计很难。

九、论坛系统

YetAnotherForum可以作为ASP.NET开发的网站的论坛或是留言板。它使用MSSQL作为底层数据库。

十、安装制作

izfree是一套套免费的工具用于帮助创建使用Microsoft”’’s Windows

Installer 技术的安装程序。使用izfree你可以为你的应用程序制作强劲的安装程序。

Windows Installer XML

(WiX)可以重XML源文件创建Windows程序安装包的工具集。它支持命令行方式,开发人员可以把结合它来创建MSI和MSM安装包一个可以和商业软件安装产品相比的开源打包工具。

一般的需求试用VS

自带的就可以了,更复杂的需要用到InstallShield,这样看起来开源的就没啥意义了。

十一、IoC容器

Spring.net是从java的Spring

Framework移植过来的。java的Spring包含了许多功能和特性,在当前的Spring.net都有提供。Spring.net最初发布的版本包含了一个很有特色的IoC容器。

Castle是一组应用开发的工具,内含一个简单的IoC容器。

StructureMap是.NET环境下的一个轻量级依赖注入工具,StructureMap也是一个灵活的、可扩展的通用“插件”机制的.NE

我用过StrucutureMap,但是给我的感觉是,试用这个似乎没多发帮助。

十二、网络客户端

.NET FTP Client是C#编写的开源类库。

.NET Telnet是微软.NET

Framework下的C#开发的开源telnet类库。它的灵感来至Java Telnet Application。

metro这个项目是C#编写的类库,它提供了一套丰富的类使开发IP version 4, TCP,

UDP and ICMP等工作更容易。它包含了有很有用的工具如包嗅探器,网络分析工具例如路由跟踪,ping等。

LJ.NET是LiveJournal站点的客户端。它为LJ在线日志服务提供了简单而强大的用户接口。

NET VNC Viewer 是一款完全用C#开发的开源VNC观察器。它兼容Smartphones,

Pocket PC和Windows的电脑(.NET CF or .NET Framework)。它比起其它观察器的优点是可以在Pocket

PC上全屏显示而且可以旋转屏幕。

GVDownloader允许你从google videos, metacafe, putfile,

youtube, break.com 和更多的地方快速下载内含的视频和多媒体。它的包含一个强劲IE插件和位于你系统托盘的独立程序。

DotNetOpenMail能够使你在微软.net框架开发的asp.net,

WinForm应用程序发送Email。它是C#编写的开源组件,它不需要使用System.Web.Mail类库就可以容易的创建带附件HTML和

Plain-text的Email。程序员不需要知道很多相关的细节就可以使用不同的字符集或不同的MINE编码来创建

multipart/alternative,multipart/related和multipart/mixed的MIME消息。

DotMSN是一款独立的开源类库,它不需要和官方的MSN Messenger交互,因此不必安装MSN

Messenger就可以使用DotMSN和MSN

Messenger服务通信.DotMSN是C#编写的,所以.NET环境支持的语言都能够使用.DotMSN类库使用简单而且实现方便。它灵活,坚固,

轻量级利于整合到任何应用系统.使用DotMSN的应用系统能实现从创建消息机器人到自定义客户端等各种不同的功能.如果你的应用程序需要和

Messenger服务通信,DotMSN是一个不错的工具.

SharpSSH使用C#实现了SSH2协议,它支持SSH, SCP 和 SFTP.

OpenPOP.NET一组和POP Servers通信的.NET类库。

IceChat是为连接多样的IRC Servers设计的Internet Relay Chat

Client。

lphant是为edonkey/emule开发的开源客户端程序。

.NET FTP Client C#开发的类库。

OpenSmtp.net 是 C# 开发的开源SMTP组件。它不依赖.NET Framework

的System.Web.Mail 包中的类。允许开发人员使用不同于MS SMTP的SMTP 服务器且提供了web

service而可以通过HTTP发送email。

这里面有几个值得推荐,例如DotMsn这个,在某些场合就很有用处。

即时聊天通用的协议是 XMPP,基于这个协议有一套java开源的服务端 openfire,可以快速的搭建一套即时聊天服务端。

但是现在有不少云即时通讯服务。例如

容联云通讯、云之讯、环信、融云

这些云服务提供了api,我们基于他的api开发很容易实现自己的即时聊天软件。服务端,服务器都不用我们自己管了,极大的节省了成本和开发周期。而且这些云服务基础服务都是免费的。

建议用第三方的云服务实现。

请去360手机助手下载android学习手册里面有例子、源码和文档

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。目前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire 等等。

以上是从网上找到的mina框架简单介绍。

由于正在开发的项目中要求加入及时通信功能(游戏方面),所以在网上找了好几种框架,像openfire、tigase等都是基于Xmpp协议开发的优秀框架。但这些侧重于消息的推送,不适合游戏上的简单交互。所以后来找到了mina这个框架,顺手搭建起来。接下来就是这几天学习的总结了,文章里面没有涉及到逻辑层的方面,只是简单的实现即时通信功能。资源下载我会放在文章的最后面。

一、相关资源下载

(1)Apache官方网站:http://mina.apache.org/downloads.html

(2) Android用jar包(包括官网的资源,我会一律放在百度网盘下)

二、Mina简单配置

服务器端一共要用到四个jar包,包括一个日志包。将他们放在lib中,并加载进去

分别为 mina-core-2.0.7.jar  slf4j-log4j12-1.7.6.jar  slf4j-api-1.7.6.jar  log4j-1.2.14.jar(日志管理包)

如果要使用日志的jar包,则要在项目的src目录下新建一个log4j.properties,添加内容如下:

log4j.rootCategory=INFO, stdout , R  

 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender  

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  

log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n  

   

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender  

log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log  

log4j.appender.R.layout=org.apache.log4j.PatternLayout  

1log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n  

 

log4j.logger.com.neusoft=DEBUG  

log4j.logger.com.opensymphony.oscache=ERROR  

log4j.logger.net.sf.navigator=ERROR  

log4j.logger.org.apache.commons=ERROR  

log4j.logger.org.apache.struts=WARN  

log4j.logger.org.displaytag=ERROR  

log4j.logger.org.springframework=DEBUG  

log4j.logger.com.ibatis.db=WARN  

log4j.logger.org.apache.velocity=FATAL  

 

log4j.logger.com.canoo.webtest=WARN  

 

log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN  

log4j.logger.org.hibernate=DEBUG  

log4j.logger.org.logicalcobwebs=WARN  

log4j.rootCategory=INFO, stdout , R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log

log4j.appender.R.layout=org.apache.log4j.PatternLayout

1log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

log4j.logger.com.neusoft=DEBUG

log4j.logger.com.opensymphony.oscache=ERROR

log4j.logger.net.sf.navigator=ERROR

log4j.logger.org.apache.commons=ERROR

log4j.logger.org.apache.struts=WARN

log4j.logger.org.displaytag=ERROR

log4j.logger.org.springframework=DEBUG

log4j.logger.com.ibatis.db=WARN

log4j.logger.org.apache.velocity=FATAL

log4j.logger.com.canoo.webtest=WARN

log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN

log4j.logger.org.hibernate=DEBUG

log4j.logger.org.logicalcobwebs=WARN

Android客户端要加入的jar包:mina-core-2.0.7.jar  slf4j-android-1.6.1-RC1.jar 两个jar包(可能直接使用上面的jar包也会行,我没试过~)

二、Mina服务端

我这边使用的是mina2.0版本,所以可能与mina1.0的版本有所不同。那么首先在服务器端创建开始

新建一个Demo1Server.class文件,里面包含着程序的入口,端口号,Acceptor连接.

1 public class Demo1Server {

2     //日志类的实现

3     private static Logger logger = Logger.getLogger(Demo1Server.class)

4     //端口号,要求客户端与服务器端一致

5     private static int PORT = 4444

6    

7     public static void main(String[] args){

8         IoAcceptor acceptor = null

9         try{

10             //创建一个非阻塞的server端的Socket

11             acceptor = new NioSocketAcceptor()

12             //设置过滤器(使用mina提供的文本换行符编解码器)

13             acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())))

14             //自定义的编解码器

15             //acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new CharsetCodecFactory()))

16             //设置读取数据的换从区大小

17             acceptor.getSessionConfig().setReadBufferSize(2048)

18             //读写通道10秒内无操作进入空闲状态

19             acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10)

20             //为接收器设置管理服务

21             acceptor.setHandler(new Demo1ServerHandler())

22             //绑定端口

23             acceptor.bind(new InetSocketAddress(PORT))

24            

25             logger.info("服务器启动成功...    端口号未:"+PORT)

26            

27         }catch(Exception e){

28             logger.error("服务器启动异常...",e)

29             e.printStackTrace()

30         }

31     }

32

33 }

一个很简单的程序入口吧,简单的说就是在服务器上设置一个消息接收器,让它监听从端口传过来的消息并进行处理。那么接下来我们看看怎么进行消息处理。

新建一个消息处理类,或者说是是业务逻辑处理器——Demo1ServerHandler,它继承了IoHandlerAdapter类,它默认覆盖了七个方法,而我们主要使用messageReceived()。

public class Demo1ServerHandler extends IoHandlerAdapter {

   public static Logger logger = Logger.getLogger(Demo1ServerHandler.class)

   

   //从端口接受消息,会响应此方法来对消息进行处理

   @Override

   public void messageReceived(IoSession session, Object message)

           throws Exception {

               String msg = message.toString()

               if("exit".equals(msg)){

                    //如果客户端发来exit,则关闭该连接

                    session.close(true)

                }

       //向客户端发送消息

       Date date = new Date()

       session.write(date)

       logger.info("服务器接受消息成功...")       

       super.messageReceived(session, message)

   }

   //向客服端发送消息后会调用此方法

   @Override

   public void messageSent(IoSession session, Object message) throws Exception {

       logger.info("服务器发送消息成功...")

       super.messageSent(session, message)

   }

   //关闭与客户端的连接时会调用此方法

   @Override

   public void sessionClosed(IoSession session) throws Exception {

       logger.info("服务器与客户端断开连接...")

       super.sessionClosed(session)

   }

   //服务器与客户端创建连接

   @Override

   public void sessionCreated(IoSession session) throws Exception {

       logger.info("服务器与客户端创建连接...")

       super.sessionCreated(session)

   }

   //服务器与客户端连接打开

   @Override

   public void sessionOpened(IoSession session) throws Exception {

       logger.info("服务器与客户端连接打开...")

       super.sessionOpened(session)

   }

   @Override

   public void sessionIdle(IoSession session, IdleStatus status)

           throws Exception {

       logger.info("服务器进入空闲状态...")

       super.sessionIdle(session, status)

   }

   @Override

   public void exceptionCaught(IoSession session, Throwable cause)

           throws Exception {

       logger.info("服务器发送异常...")

       super.exceptionCaught(session, cause)

   }        

}

很直白的一段程序,相当于将服务器分成了七个状态,而每个状态都有自己的一套逻辑处理方案。

至此,一个最简单的Mina服务器框架就搭好了,我们可以使用电脑上的telnet命令来测试一下服务器能否使用

cmd控制台—>telnet <ip地址><端口号>  如我的服务器ip地为192.168.1.10  那我就写telnet 192.168.1.10 4444 .此时我们可以看到输出日志为

此时连接已经创建,我们在输入信息服务器就会对信息进行处理,并给出相应的应答。

(telnet的用法不知道的可以自行百度)

三、Mina客户端(Android端)

服务器简单搭建完毕,那么开始在Android端是配置服务器吧。同样的不要忘记加载jar包, 由于Android自带了Logout,所以就不使用Mina的日志包了。

由于接受消息会阻塞Android的进程,所以我把它开在子线程中(同时将其放在Service中,让其在后台运行)

1 public class MinaThread extends Thread {

2    

3     private IoSession session = null

4

5     @Override

6     public void run() {

7         // TODO Auto-generated method stub

8         Log.d("TEST","客户端链接开始...")

9         IoConnector connector = new NioSocketConnector()

10         //设置链接超时时间

11         connector.setConnectTimeoutMillis(30000)

12         //添加过滤器

13         //connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new CharsetCodecFactory()))

14         connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())))

15         connector.setHandler(new MinaClientHandler(minaService))

16        

17         try{

18             ConnectFuture future = connector.connect(new InetSocketAddress(ConstantUtil.WEB_MATCH_PATH,ConstantUtil.WEB_MATCH_PORT))//创建链接

19             future.awaitUninterruptibly()// 等待连接创建完成

20             session = future.getSession()//获得session

21             session.write("start")

22         }catch (Exception e){

23             Log.d("TEST","客户端链接异常...")

24         }

25         session.getCloseFuture().awaitUninterruptibly()//等待连接断开

26         Log.d("TEST","客户端断开...")

27         connector.dispose()

28         super.run()

29     }

30

31 }

不知道你们注意到了没,客户端的代码与服务器端的极其相似,不同的是服务器是创建NioSocketAcceptor对象,而客户端是创建NioSocketConnect对象。当然同样需要添加编码解码过滤器和业务逻辑过滤器。

业务逻辑过滤器代码:

1 public class MinaClientHandler extends IoHandlerAdapter{

2

3

4     @Override

5     public void exceptionCaught(IoSession session, Throwable cause)

6             throws Exception {

7         Log.d("TEST","客户端发生异常")

8         super.exceptionCaught(session, cause)

9     }

10

11     @Override

12     public void messageReceived(IoSession session, Object message)

13             throws Exception {

14         String msg = message.toString()

15         Log.d("TEST","客户端接收到的信息为:" + msg)

16         super.messageReceived(session, message)

17     }

18

19     @Override

20     public void messageSent(IoSession session, Object message) throws Exception {

21         // TODO Auto-generated method stub

22         super.messageSent(session, message)

23     }

24 }

方法功能与服务器端一样。测试这里就不做了。可以的话自己写个Demo效果更好

四、Mina的更多功能

拿到所有客户端Session

Collection<IoSession>sessions = session.getService().getManagedSessions().values()

自定义编码解码器,可以对消息进行预处理。要继承ProtocolEncoder和ProtocolDecode类。

数据对象的传递

这些功能不便放在这里讲了,可能我会以后再找机会另开一篇来讲述这些功能~,大家可以浏览结尾处的参考文章来加深对mina的理解。

在我认为,熟悉和快速使用一个新的的框架可以看出一个程序员的水平,同样及时总结和归纳自己学到的新知识也是一个好的程序员该具有的习惯。那么Mina的简单搭建就到这里为止了,希望对大家有所帮助


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/310857.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存