Netty使用标准套接字获得响应

时间:2014-09-15 15:20:56

标签: java c netty nio

是否可以将Netty服务器(ServerBootstrap)的响应作为客户端发送到标准Java套接字?

我试图等待结果但没有任何成功。

服务器:

EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
    ServerBootstrap serverBootstrap = new ServerBootstrap();
    serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
        .option(ChannelOption.SO_BACKLOG, 100)
        .handler(new LoggingHandler(LogLevel.DEBUG))
        .childHandler(new ChannelInitializer<SocketChannel>() {
            @Override
            public void initChannel(SocketChannel ch) throws Exception {
                    ch.pipeline().addLast(new ResponseHandler());
            }
        });

    ChannelFuture channelFuture = serverBootstrap.bind(Configuration.serverPort).sync();
        channelFuture.channel().closeFuture().sync();
}
finally {
    bossGroup.shutdownGracefully();
    workerGroup.shutdownGracefully();
}

处理程序:

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
    ctx.write(msg);
    ctx.flush();
}

客户端:

Socket socket = new Socket(this.host, this.port);
socket.setKeepAlive(true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream output = new PrintStream(socket.getOutputStream());
output.write("Test");

int response;
while ((response = in.read()) != -1) {
    System.out.println(response);
}

2 个答案:

答案 0 :(得分:0)

我认为您的问题是“您是否需要在服务器和客户端计算机上使用Netty?”不,你没有。在标准网络之上,Netty只是一个抽象(尽管是一个非常聪明和复杂的抽象)(类似于JDK中包含的网络框架 - 我认为这是标准java套接字的意思)。

您是否在服务器端获取channelRead以查看任何内容时遇到问题?

您使用的是什么Netty API版本(3,4或5) - 这决定了您使用的“读取”方法?

可能还需要显示ServerBootstrap的代码(包括管道初始化程序),以便查看问题所在。

答案 1 :(得分:0)

问题在于处理程序,当我将其更改为我的处理程序时,我使用ChannelInitializer一切都开始正常运行。

ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
    .option(ChannelOption.SO_BACKLOG, 100)
    .childOption(ChannelOption.SO_KEEPALIVE, true)
    .handler(new LoggingHandler(LogLevel.DEBUG))
    .childHandler(new ResponseHandler());