Netty3.0+ server & client Demo(一)
来源:互联网 发布:获取网页局部源码 编辑:程序博客网 时间:2024/05/22 03:03
学习netty之前,请先学习几个nio小知识,可以跟着小Demo去悄悄看看。
先上Netty3.0+的服务端
package Demo1;import java.net.InetSocketAddress;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ServerBootstrap;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;public class NettyServer {/** * @param args */public static void main(String[] args) {ServerBootstrap bootstrap = new ServerBootstrap();ExecutorService boss = Executors.newCachedThreadPool();ExecutorService worker = Executors.newCachedThreadPool();bootstrap.setFactory(new NioServerSocketChannelFactory(boss, worker));bootstrap.setPipelineFactory(new ChannelPipelineFactory() {@Overridepublic ChannelPipeline getPipeline() throws Exception {ChannelPipeline pipeline = Channels.pipeline();pipeline.addLast("decoder", new StringDecoder());pipeline.addLast("encoder", new StringEncoder());pipeline.addLast("helloHandler", new HelloHandler());return pipeline;}});bootstrap.bind(new InetSocketAddress(10100));}}
package Demo1;import org.jboss.netty.channel.ChannelHandlerContext;import org.jboss.netty.channel.ChannelStateEvent;import org.jboss.netty.channel.ExceptionEvent;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;public class HelloHandler extends SimpleChannelHandler{/** * 新连接关闭 */@Overridepublic void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {// TODO Auto-generated method stubsuper.channelClosed(ctx, e);}/** * 新连接 */@Overridepublic void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {// TODO Auto-generated method stubsuper.channelConnected(ctx, e);}/** * 断开连接 */@Overridepublic void channelDisconnected(ChannelHandlerContext ctx,ChannelStateEvent e) throws Exception {// TODO Auto-generated method stubsuper.channelDisconnected(ctx, e);}/** * 连接出现了异常 */@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)throws Exception {// TODO Auto-generated method stubsuper.exceptionCaught(ctx, e);}/** * 消息处理 */@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception {// TODO Auto-generated method stubString msg = (String) e.getMessage();System.out.println("server msg:"+msg);ctx.getChannel().write("hello,client!");super.messageReceived(ctx, e);}}接着客户端
package Demo2;import java.net.InetSocketAddress;import java.util.concurrent.Executor;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ClientBootstrap;import org.jboss.netty.channel.Channel;import org.jboss.netty.channel.ChannelFuture;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;public class NettyClient {/** * @param args */public static void main(String[] args) {ClientBootstrap bootstrap = new ClientBootstrap();Executor boss = Executors.newCachedThreadPool();Executor worker = Executors.newCachedThreadPool();bootstrap.setFactory(new NioClientSocketChannelFactory(boss, worker));bootstrap.setPipelineFactory(new ChannelPipelineFactory() {@Overridepublic ChannelPipeline getPipeline() throws Exception {ChannelPipeline pipeline = Channels.pipeline();pipeline.addLast("decoder", new StringDecoder());pipeline.addLast("encoder", new StringEncoder());pipeline.addLast("hiHandler", new HiHandler());return pipeline;}});ChannelFuture connect = bootstrap.connect(new InetSocketAddress("127.0.0.1",10100));Channel channel = connect.getChannel();channel.write("send client datas");}}
package Demo2;import org.jboss.netty.channel.ChannelHandlerContext;import org.jboss.netty.channel.ChannelStateEvent;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;public class HiHandler extends SimpleChannelHandler {@Overridepublic void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {// TODO Auto-generated method stubsuper.channelClosed(ctx, e);}@Overridepublic void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {// TODO Auto-generated method stubsuper.channelConnected(ctx, e);}@Overridepublic void channelDisconnected(ChannelHandlerContext ctx,ChannelStateEvent e) throws Exception {// TODO Auto-generated method stubsuper.channelDisconnected(ctx, e);}@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception {// TODO Auto-generated method stubString msg = (String) e.getMessage();System.out.println("client msg:"+msg);super.messageReceived(ctx, e);}}
这两个例子并没有太多新的东西,就是官网一个简单的helloworld而已!
阅读全文
0 0
- Netty3.0+ server & client Demo(一)
- Netty5.0+ server & client Demo(二)
- Netty3.5.9源码(一)Server端启动
- Netty3.5.9源码(一)Server端启动
- netty4.0之TCP的server与client初探(与3.X版本变化)DEMO
- netty4.0之TCP的server与client初探(与3.X版本变化)DEMO
- nio udp server client Demo例子(五)
- JSON RESTful Client-Server(一)
- Python 实现的简单server-client demo
- messenger,client和server通信Demo
- thrift语法及PHP-server-client demo
- Winsocket 一:单线程阻塞server&client程序(tcp)
- Creating A WPF Chat Client Server Application(一)
- vc++ socket通信基础 client and server demo
- Mina客户端Client和Server对象传输demo
- 一个简单的ACE网络库Server和Client Demo
- java server 多client异步socket通信demo
- thrift 安装 C++server 及PHP Client 测试Demo
- Vuforia Extended Tracking 在 Unity + Hololens中的应用总结
- BlockingQueue
- 弄清楚这个三角关系,工作效率提高50%
- Spring+Hibernate下配置Hibernate二级缓存EhCache
- 用 Node.js
- Netty3.0+ server & client Demo(一)
- Chapter 1 Section 1.3 Vocabulary
- Qt之QSpinBox,QDoubleSpinBox及自定义QSpinBox
- android kotlin其它(一)解构声明
- 工程中编写自己的makefile---2 实例
- WebAssembly 实践:如何写代码
- tomcat+spring配置jndi数据源
- jquery动态生成的元素自动执行一次click事件
- PendingIntent和AlarmManager实现定时(重复)任务 Android