netty基础入门(二)简单项目搭建
来源:互联网 发布:淘宝 zara 原单 编辑:程序博客网 时间:2024/06/05 06:33
目的: 搭建简单的服务端和客户端进行通信
服务端搭建
1、新建java project项目,在src下面新建com.nettyServer的package
nettyServer.java
package com.nettyServer;import io.netty.bootstrap.Bootstrap;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.Channel;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelPipeline;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioServerSocketChannel;import io.netty.handler.codec.LengthFieldBasedFrameDecoder;import io.netty.handler.codec.LengthFieldPrepender;import io.netty.handler.codec.string.StringDecoder;import io.netty.handler.codec.string.StringEncoder;import io.netty.util.CharsetUtil;public class nettyServer {private static final int BIZGROUPSIZE = Runtime.getRuntime().availableProcessors()*2; private static final int BIZTHREADSIZE = 100; private static final EventLoopGroup bossGroup = new NioEventLoopGroup(BIZGROUPSIZE); private static final EventLoopGroup workerGroup = new NioEventLoopGroup(BIZTHREADSIZE); public static void main(String args[]){ //服务端 ServerBootstrap serverBootstrap; //客户端 Bootstrap clientBootstrap; //客户端通道 Channel clientChannel; //服务端通道 Channel serverChannel ; serverBootstrap = new ServerBootstrap(); serverBootstrap.group(bossGroup, workerGroup); serverBootstrap.channel(NioServerSocketChannel.class); //添加handler监听服务端的IO动作 // serverBootstrap.handler(new OutHandler()); serverBootstrap.childHandler(new ChannelInitializer<Channel>(){ @Override protected void initChannel(Channel arg0) throws Exception { // TODO Auto-generated method stub ChannelPipeline pipeline = arg0.pipeline(); pipeline.addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4)); pipeline.addLast(new LengthFieldPrepender(4)); pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8)); pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8)); //添加handler监听客户端Channel的状态变化 pipeline.addLast(new TcpServerHandler()); } }); try { //服务端启动 ChannelFuture cf = serverBootstrap.bind(56560).sync(); System.out.println("服务端启动成功,开始监听端口56560"); // Toast.makeText(getActivity(), "TCP服务器已启动", Toast.LENGTH_SHORT).show(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
OutHandler.java
package com.nettyServer;import java.net.SocketAddress;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelOutboundHandlerAdapter;import io.netty.channel.ChannelPromise;public class OutHandler extends ChannelOutboundHandlerAdapter{ @Override public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception { // TODO Auto-generated method stub super.connect(ctx, remoteAddress, localAddress, promise); System.out.println("<<<<<<<<<<<<<<< connect server success >>>>>>>>>>>>>>>>"); } @Override public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) throws Exception { // TODO Auto-generated method stub super.bind(ctx, localAddress, promise); System.out.println("<<<<<<<<<<<<<<< server bind success >>>>>>>>>>>>>>>>"); } }
TcpServerhandler.java
package com.nettyServer;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandlerAdapter;public class TcpServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { // TODO Auto-generated method stub System.out.println("<<<<<<<<<<<<<<<<收到客户端消息 :"+ msg); ctx.channel().writeAndFlush("<<<<<<<<<<服务端已经接收:" + msg); } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { // TODO Auto-generated method stub System.out.println("通道已经启用>>>>>>>>"); // clientChannel = ctx.channel(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { System.out.println("exception is general"); } }
客户端搭建: 新建一个java project项目 src下新建 com.nettyClient
nettyClient.java
package com.nettyClient;import io.netty.bootstrap.Bootstrap;import io.netty.channel.Channel;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.ChannelPipeline;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioSocketChannel;import io.netty.handler.codec.LengthFieldBasedFrameDecoder;import io.netty.handler.codec.LengthFieldPrepender;import io.netty.handler.codec.string.StringDecoder;import io.netty.handler.codec.string.StringEncoder;import io.netty.util.CharsetUtil;public class nettyClient { public static void main(String args[]){ EventLoopGroup group = new NioEventLoopGroup(); Bootstrap b = new Bootstrap(); b.group(group); b.channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true); b.handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4)); pipeline.addLast("frameEncoder", new LengthFieldPrepender(4)); pipeline.addLast("decoder", new StringDecoder(CharsetUtil.UTF_8)); pipeline.addLast("encoder", new StringEncoder(CharsetUtil.UTF_8)); //添加一个Hanlder用来处理各种Channel状态 pipeline.addLast("handlerIn", new ClientHandler()); //添加一个Handler用来接收监听IO操作的 // pipeline.addLast("handlerOut", new OutHandler()); } }); ChannelFuture f; try { //连接服务端 f = b.connect("127.0.0.1", 56560).sync(); Channel serverChannel = f.channel(); serverChannel.writeAndFlush("<<<<<<<<<<<<<<<<客户端请求连接>>>>>>>>>>>>>>>>"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.nettyClient;import java.net.SocketAddress;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelOutboundHandlerAdapter;import io.netty.channel.ChannelPromise;public class OutHandler extends ChannelOutboundHandlerAdapter{ @Override public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception { // TODO Auto-generated method stub super.connect(ctx, remoteAddress, localAddress, promise); System.out.println("<<<<<<<<<<<<<<< connect server success >>>>>>>>>>>>>>>>"); } @Override public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) throws Exception { // TODO Auto-generated method stub super.bind(ctx, localAddress, promise); System.out.println("<<<<<<<<<<<<<<< server bind success >>>>>>>>>>>>>>>>"); } }
ClientHandler.java
package com.nettyClient;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandlerAdapter;public class ClientHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { System.out.println("<<<<<<<<<客户端收到消息:" + msg); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { System.out.println("client exception is general"); } }
引入的jar包,netty-3.5.5-Final.jar
运行项目就会进行服务端与客户端的通信
阅读全文
0 0
- netty基础入门(二)简单项目搭建
- Netty(一) 简单入门
- 简单搭建注解ssh项目(二)
- Netty服务端和客户端搭建(入门)
- MyBatis入门基础项目搭建
- Netty (二) 入门
- netty基础入门(一)定义理解
- netty基础入门(channel理解)
- Mybatis基础入门之(二)——环境搭建
- vue2+vuex+vue-router 快速入门(二) 项目搭建
- Spring MVC入门基础项目环境搭建
- AngularJS入门之简单的项目搭建
- Netty的入门-基础编程
- 数据库基础入门(二)——具体项目实现
- netty的基础概念二
- Spring基础之搭建简单的项目
- netty入门(1)
- Netty学习:搭建一个简单的Netty服务
- eclipse创建.userlibraries,导入.userlibraries
- Centos7安装nexus
- sourceInsight4 破解笔记(完美破解)
- uml建模分析思路
- 第十三天 :关于java中垃圾回收机制的总结
- netty基础入门(二)简单项目搭建
- tar解压失败:gzip: stdin: not in gzip format
- KMP算法--C/C++
- constructor与module
- storm安装配置(单机版)
- C++STL容器的选择与使用指南
- HTTPS详析(一)
- 常用DOS命令
- Activity进出动画全局统一配置