繁体   English   中英

Netty-客户端读写操作

[英]Netty - Client Write & Read Operation

我正在尝试从服务器发送和接收消息。 该服务器已构建在远程环境中。

服务器具有一些特殊的信号代码,例如: 在此处输入图片说明

这些代码将作为字节发送。 此时,问题开始了。

当客户端与服务器连接时,服务器立即发送100000050,并在几毫秒后发送10000051。

我应该在收到10000051后发送10000060,但我不知道如何发送。

CLIENT.JAVA

public static void main(String[] args) throws Exception {
        EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap clientBootstrap = new Bootstrap();

            clientBootstrap.group(group);
            clientBootstrap.channel(NioSocketChannel.class);
            clientBootstrap.remoteAddress(new InetSocketAddress("10.80.15.70", 55102));

            clientBootstrap.handler(new ChannelInitializer<SocketChannel>() {
                protected void initChannel(SocketChannel socketChannel) throws Exception {
                    socketChannel.pipeline().addLast(new ClientHandler());
                }
            });
            ChannelFuture channelFuture = clientBootstrap.connect().sync();

            channelFuture.channel().closeFuture().sync();
        }
        finally {
            group.shutdownGracefully().sync();
        }
    }

CLIENTHANDLER.JAVA

public class ClientHandler extends SimpleChannelInboundHandler<ByteBuf> {
    private static final Logger LOGGER = Logger.getLogger( ClientHandler.class.getName() );

    @Override
    public void channelActive(ChannelHandlerContext channelHandlerContext){
        //System.out.println("\nhelloo");
        //channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer("Netty Rocks!", CharsetUtil.UTF_8));
        byte [] test = new byte[9];

        test[0] = 0;
        test[1] = 6;
        test[2] = 0;
        test[3] = 0;
        test[4] = 0;
        test[5] = 0;
        test[6] = 0;
        test[7] = 0;
        test[8] = 1;


        //byte [] message = "100000060".getBytes();
        channelHandlerContext.writeAndFlush(test);
    }

    @Override
    public void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf in) {
        System.out.println("Client received: " + in.toString(CharsetUtil.UTF_8));
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext channelHandlerContext, Throwable cause){
        cause.printStackTrace();
        LOGGER.info("Exception Occurred in ChannelHandler A");
        channelHandlerContext.close();
    }

    /*@Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
        System.out.println("Client received: " + o.toString());
    }*/
}

谢谢。

您可以通过更新channelRead0方法来检查收到的消息,然后在收到所需的消息时进行回复来做到这一点。

@Override
public void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf in) {
    String message = in.toString(CharsetUtil.UTF_8);

    if (message.equals("10000051")) { //Now do what you were doing in channel active
        byte [] test = new byte[9];

        test[0] = 0;
        test[1] = 6;
        test[2] = 0;
        test[3] = 0;
        test[4] = 0;
        test[5] = 0;
        test[6] = 0;
        test[7] = 0;
        test[8] = 1;


        //byte [] message = "100000060".getBytes();
        channelHandlerContext.writeAndFlush(test);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM