是否可以将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);
}
答案 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());