1,Server端:
package com.netty1; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.ChannelFactory; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.Channels; import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; import org.jboss.netty.handler.codec.string.StringDecoder; import org.jboss.netty.handler.codec.string.StringEncoder; import java.net.InetSocketAddress; import java.util.concurrent.Executors; public class Server { public static void main(String[] args) throws Exception { ChannelFactory factory = new NioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool()); ServerBootstrap bootstrap = new ServerBootstrap (factory); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { public ChannelPipeline getPipeline() { ChannelPipeline p = Channels.pipeline(); p.addLast("encode",new StringEncoder()); p.addLast("decode",new StringDecoder()); p.addLast("handler",new ServerHandler()); return p; } }); bootstrap.setOption("child.tcpNoDelay", true); bootstrap.setOption("child.keepAlive", true); //--服务端监听端口号; bootstrap.bind(new InetSocketAddress(14000)); } }
2.ServerHandler
package com.netty1; import org.jboss.netty.channel.*; public class ServerHandler extends SimpleChannelUpstreamHandler { @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { //接受消息处理 System.out.println("服务器接受到1:"+e.getMessage()); } @Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) { e.getChannel().write("Reply----"); } @Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) { e.getCause().printStackTrace(); Channel ch = e.getChannel(); ch.close(); } }
3,Client端
package com.netty1; import org.jboss.netty.bootstrap.ClientBootstrap; import org.jboss.netty.channel.ChannelFactory; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.Channels; import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; import org.jboss.netty.handler.codec.string.StringDecoder; import org.jboss.netty.handler.codec.string.StringEncoder; import java.net.InetSocketAddress; import java.util.concurrent.Executors; public class Client { public static void main(String[] args) throws Exception { ChannelFactory factory = new NioClientSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool()); ClientBootstrap bootstrap = new ClientBootstrap(factory); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { public ChannelPipeline getPipeline() { ChannelPipeline p = Channels.pipeline(); p.addLast("encode",new StringEncoder()); p.addLast("decode",new StringDecoder()); p.addLast("handler",new ClientHandler()); return p; } }); bootstrap.setOption("tcpNoDelay" , true); bootstrap.setOption("keepAlive", true); bootstrap.connect (new InetSocketAddress("127.0.0.1", 14000)); } }
4,ClientHandler
package com.netty1; import org.jboss.netty.channel.*; public class ClientHandler extends SimpleChannelUpstreamHandler { @Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) { e.getChannel().write("request"); } @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { System.out.println("服务器回复:" + e.getMessage()); e.getChannel().close(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) { e.getCause().printStackTrace(); e.getChannel().close(); } }
简单的客户端,服务端代码算是搞定了,运行!!!
通过对北大青鸟的前两集视频的学习,对asp.net有了初步的认识,下面介绍什么是asp.net 并将asp.net和asp进行比较,同对对比来学习
ASP 是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。 指 Active Server Pages(动态服务器页面),运行于 IIS 之中的程序 。而脚本(script)是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。可执行文件 (executable file) 是可移植可执行 (PE) 文件格式的文件,它可以加载到内存中,并由操作系统加载程序执行。它可以是 .exe文件 .sys文件 .com文件等
ASP.net的优点:
-
支持强类型语言,如C#、VB
-
编译页可改进执行速度
-
提供声明性服务器控件
-
ASP代码与HTML设计和文本分离
-
内置方法Trace可以帮助调试页
-
通过继承机制支持代码的重用
-
无需注册组件
ASP的缺点:
- 仅两种非类型语言:VBScript和JavaScript。
- ASP页需要解释
- 代码、HTML和文本的混合
- 使用同一文件
- 额外的功能代码
- 代码不能重用。
- 没有调试机制
- 先关闭Web服务器才能安装新版本的DLL
区别
- 开发语言不同
ASP:局限于使用non-type脚本语言来开发,用户给WEB页中添加ASP代码的方法与客户端脚本中添加代码的方法相同,导致代码杂乱。
ASP.net:允许用户选择并使用功能完善的strongly-type编程语言,也允许使用潜加巨大的.NET Framework。
- 运行机制不同
ASP:解释运行的编程框架,所以执行效率加较低。
ASP.net:编译性的编程框架,运行是服务器上的编译好的公共语言运行时库代码,可以利用早期绑定,实施编译来提高效率。
- 开发方式不同
ASP :界面设计和程序设计混在一起,维护和重用困难。
ASP.net:界面设计和程序设计以不同的文件分离开,复用性和维护性得到了提高。
通过上面的对比,发现ASP.net比ASP进步了很多,值得大家学习.