package netty
;
import io
.netty
.bootstrap
.ServerBootstrap
;
import io
.netty
.channel
.ChannelFuture
;
import io
.netty
.channel
.ChannelInitializer
;
import io
.netty
.channel
.ChannelOption
;
import io
.netty
.channel
.EventLoopGroup
;
import io
.netty
.channel
.nio
.NioEventLoopGroup
;
import io
.netty
.channel
.socket
.SocketChannel
;
import io
.netty
.channel
.socket
.nio
.NioServerSocketChannel
;
import io
.netty
.channel
.socket
.nio
.NioSocketChannel
;
public class Nser {
public static void main(String
[] args
) throws InterruptedException
{
EventLoopGroup bossGroup
= new NioEventLoopGroup();
EventLoopGroup workGroup
= new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap
= new ServerBootstrap();
serverBootstrap
.group(bossGroup
,workGroup
)
.channel(NioServerSocketChannel
.class)
.option(ChannelOption
.SO_BACKLOG
,128)
.childOption(ChannelOption
.SO_KEEPALIVE
,true)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch
) throws Exception
{
ch
.pipeline().addLast(new Nhandler());
}
});
System
.out
.println("server is ready");
ChannelFuture channelFuture
= serverBootstrap
.bind(12312).sync();
channelFuture
.channel().closeFuture().sync();
} finally {
bossGroup
.shutdownGracefully();
workGroup
.shutdownGracefully();
}
}
}
package netty
;
import io
.netty
.buffer
.ByteBuf
;
import io
.netty
.buffer
.Unpooled
;
import io
.netty
.channel
.ChannelFuture
;
import io
.netty
.channel
.ChannelHandlerContext
;
import io
.netty
.channel
.ChannelInboundHandlerAdapter
;
import io
.netty
.util
.CharsetUtil
;
public class Nhandler extends ChannelInboundHandlerAdapter{
@Override
public void channelRead(ChannelHandlerContext ctx
, Object msg
) throws Exception
{
System
.out
.println("ctx = " + ctx
);
ByteBuf buf
= (ByteBuf
) msg
;
System
.out
.println("client:"+((ByteBuf
) msg
).toString(CharsetUtil
.UTF_8
));
System
.out
.println("address:"+ctx
.channel().remoteAddress());
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx
) throws Exception
{
ChannelFuture channelFuture
= ctx
.writeAndFlush(Unpooled
.copiedBuffer("小子,以后跟我混就行了", CharsetUtil
.UTF_8
));
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx
, Throwable cause
) throws Exception
{
ctx
.close();
}
}