|
client部分代碼: //線程
EventLoopGroup worker = new NioEventLoopGroup();
//輔助類
Bootstrap b = new Bootstrap();
//注冊server
b.group(worker)
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel sc) throws Exception {
// TODO Auto-generated method stub
sc.pipeline().addLast(new ClientHandler());
}
});
clientHandler部分代碼: @Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
// TODO Auto-generated method stub
try {
ByteBuf buf = (ByteBuf)msg;
byte[] bytes = new byte[buf.readableBytes()];
buf.readBytes(bytes);
String result = new String(bytes, "utf-8");
System.out.println("Server: " result);
}finally {
ReferenceCountUtil.release(msg);
}
}
? ? 下面查看完整代碼 : client: public static void main(String[] args) throws InterruptedException {
//線程
EventLoopGroup worker = new NioEventLoopGroup();
//輔助類
Bootstrap b = new Bootstrap();
//注冊server
b.group(worker)
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel sc) throws Exception {
// TODO Auto-generated method stub
//不做任何處理,ByteBuf格式傳輸
sc.pipeline().addLast(new ClientHandler());
}
});
ChannelFuture cf = b.connect("127.0.0.1", 8765).sync();
cf.channel().writeAndFlush(Unpooled.copiedBuffer("hello netty!!".getBytes()));
// Thread.sleep(1000);
// cf.channel().writeAndFlush(Unpooled.copiedBuffer("hello netty!!".getBytes()));
// Thread.sleep(1000);
// cf.channel().writeAndFlush(Unpooled.copiedBuffer("hello netty!!".getBytes()));
//發(fā)送完畢,斷開連接
cf.addListener(ChannelFutureListener.CLOSE);
cf.channel().closeFuture().sync();
worker.shutdownGracefully();
}
? clientHandler代碼: 需要繼承:ChannelHandlerAdapter這個類 public class ClientHandler extends ChannelHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
// TODO Auto-generated method stub
try {
//原始ByteBuf數(shù)據(jù)格式處理
ByteBuf buf = (ByteBuf)msg;
byte[] bytes = new byte[buf.readableBytes()];
buf.readBytes(bytes);
String result = new String(bytes, "utf-8");
System.out.println("Server: " result);
}finally {
//接收處理完后,丟棄
ReferenceCountUtil.release(msg);
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
// TODO Auto-generated method stub
cause.printStackTrace();
ctx.close();
}
}
? Server代碼: public static void main(String[] args) throws InterruptedException {
//第一個線程連接client端
EventLoopGroup boss = new NioEventLoopGroup();
//第二個線程處理邏輯
EventLoopGroup worker = new NioEventLoopGroup();
//輔助類,注冊 server
ServerBootstrap b = new ServerBootstrap();
b.group(boss, worker)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel sc) throws Exception {
// TODO Auto-generated method stub
sc.pipeline().addLast(new ServerHandler());
}
});
//綁定指定的端口方便監(jiān)聽
ChannelFuture cf = b.bind(8765).sync();
cf.channel().closeFuture().sync();
boss.shutdownGracefully();
worker.shutdownGracefully();
}
? serverHandler代碼: 需要繼承:ChannelHandlerAdapter 類 public class ServerHandler extends ChannelHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
// TODO Auto-generated method stub
ByteBuf buf = (ByteBuf)msg;
byte[] bs = new byte[buf.readableBytes()];
buf.readBytes(bs);
String result = new String(bs, "utf-8");
System.out.println("Client: " result);
String response = "888888";
ctx.writeAndFlush(Unpooled.copiedBuffer(response.getBytes()));
//.addListener(ChannelFutureListener.CLOSE);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
// TODO Auto-generated method stub
cause.printStackTrace();
ctx.close();
}
}
? 來源:http://www./content-4-214951.html |
|
|