netty4 java序列化_Netty- javaserializable 序列化

1 新建实体类,这里需要实现 Serializable 接口即可

import java.io.Serializable;

public class GirlResponse implements Serializable {

private static final long serialVersionUID = -2619994978640439932L;

private int code;

private String msg;

public static long getSerialVersionUID() {

return serialVersionUID;

}

public int getCode() {

return code;

}

public void setCode(int code) {

this.code = code;

}

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2 服务端的开发

import io.netty.bootstrap.ServerBootstrap;

import io.netty.channel.*;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioServerSocketChannel;

import io.netty.handler.codec.http.HttpObject;

import io.netty.handler.codec.LineBasedFrameDecoder;

import io.netty.handler.codec.string.StringDecoder;

import io.netty.handler.logging.LogLevel;

import io.netty.handler.logging.LoggingHandler;

import java.net.InetSocketAddress;

public class Server {

public void bind(int port) throws InterruptedException

{

EventLoopGroup boss=new NioEventLoopGroup();

EventLoopGroup worker=new NioEventLoopGroup();

try

{

ServerBootstrap b=new ServerBootstrap();

b.group(boss,worker)

.channel(NioServerSocketChannel.class)

.option(ChannelOption.SO_BACKLOG, 1280)

.handler(new LoggingHandler(LogLevel.INFO))

.childHandler(new ChannelInitializer()

{

@Override

protected void initChannel(SocketChannel ch) throws Exception

{

ch.pipeline().addLast(

new ServerHandler()

);

}

});

ChannelFuture f=b.bind(port).sync();

f.channel().closeFuture().sync();

} finally

{

boss.shutdownGracefully();

worker.shutdownGracefully();

}

}

public static void main(String[] args) throws InterruptedException

{

int port = 8006;

new Server().bind(port);

}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.1 服务端服务处理

import com.fasterxml.jackson.core.io.CharTypes;

import io.netty.buffer.ByteBuf;

import io.netty.buffer.Unpooled;

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.ChannelInboundHandlerAdapter;

public class ServerHandler extends ChannelInboundHandlerAdapter

{

@Override

public void channelRead(ChannelHandlerContext ctx , Object msg) throws Exception

{

UserInfo user= (UserInfo) msg;

System.out.println("收到:"+user);

ctx.writeAndFlush(reply(user));

}

private static GirlResponse reply(UserInfo user){

GirlResponse gr=new GirlResponse();

gr.setMsg("to "+user.getName()+" : 测试");

return gr;

}

@Override

public void exceptionCaught(ChannelHandlerContext ctx , Throwable cause) throws Exception

{

cause.printStackTrace();

ctx.close();

}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3 客户端

import io.netty.bootstrap.Bootstrap;

import io.netty.bootstrap.ServerBootstrap;

import io.netty.channel.*;

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;

import io.netty.handler.codec.LineBasedFrameDecoder;

import io.netty.handler.codec.http.HttpObject;

import io.netty.handler.codec.string.StringDecoder;

import io.netty.handler.logging.LogLevel;

import io.netty.handler.logging.LoggingHandler;

public class Client {

public void connect(int port, String host) throws InterruptedException

{

EventLoopGroup group = new NioEventLoopGroup();

try

{

Bootstrap b=new Bootstrap();

b.group(group)

.option(ChannelOption.TCP_NODELAY, true)

.channel(NioSocketChannel.class)

.handler(new ChannelInitializer()

{

@Override

protected void initChannel(SocketChannel ch) throws Exception

{

ch.pipeline().addLast(new ClientHandler());

}

});

ChannelFuture f= b.connect(host, port).sync();

f.channel().closeFuture().sync();

} finally

{

group.shutdownGracefully();

}

}

public static void main(String[] args) throws InterruptedException

{

int port = 8006;

String host="127.0.0.1";

new Client().connect(port, host);

}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.1 客户端实现类

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.ChannelInboundHandlerAdapter;

import java.util.Random;

public class ClientHandler extends ChannelInboundHandlerAdapter {

public void channelActive(ChannelHandlerContext ctx) throws Exception

{

System.out.println("同学测试:");

Random r = new Random();

for (int i = 1; i <= 5; i++)

{

UserInfo user = new UserInfo();

user.setName("同学 " + i);

user.setHeight(r.nextInt(25) + 160);

ctx.write(user);

System.out.println(user);

}

ctx.flush();

}

public void channelRead(ChannelHandlerContext ctx , Object msg) throws Exception

{

GirlResponse gr= (GirlResponse) msg;

System.out.println("收到测试回复 :"+gr.getMsg());

}

public void exceptionCaught(ChannelHandlerContext ctx , Throwable cause) throws Exception

{

cause.printStackTrace();

ctx.close();

}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4运行结果

同学测试:

[name=同学 1, height=182]

[name=同学 2, height=165]

[name=同学 3, height=173]

[name=同学 4, height=163]

[name=同学 5, height=177]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值