Я работаю над проектом, который использует Netty 4.1.9.Я пытаюсь создать чрезвычайно простой HTTP-клиент, который отправляет запрос хосту, ждет ответа и затем завершает работу.
Я использую netcat для отладки этой программы, но когда я ее запускаю,процесс блокирует и фактически никогда не отправляет запрос.Ниже мой класс HttpClient:
public class HttpClient {
private String uri;
private int port;
private String payload;
public HttpClient(String uri, int port, String payload) {
this.uri = uri;
this.port = port;
this.payload = payload;
}
public void run() throws Exception {
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(workerGroup);
b.channel(NioSocketChannel.class);
b.option(ChannelOption.SO_KEEPALIVE, true);
b.handler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new HttpClientCodec());
ch.pipeline().addLast(new HttpObjectAggregator(1048576));
ch.pipeline().addLast(new SimpleChannelInboundHandler<FullHttpResponse>() {
@Override
protected void channelRead0(ChannelHandlerContext ctx, FullHttpResponse msg) throws Exception {
final String echo = msg.content().toString(CharsetUtil.UTF_8);
System.out.println(echo);
}
});
ch.pipeline().addLast(new HttpRequestEncoder());
}
});
HttpRequest request = HttpRequester.createRequest(this.uri, this.payload);
request.headers().set(HttpHeaderNames.CONTENT_TYPE, "application/json");
System.out.println("Sending message!");
Channel f = b.connect(uri, port).sync().channel();
f.writeAndFlush(request);
f.closeFuture().sync();
System.out.println("Message was sent!");
} finally {
workerGroup.shutdownGracefully();
}
}
}
, когда я запускаю это, печатается журнал «Отправка сообщения», но никогда не печатается «Сообщение было отправлено».Кроме того, netcat показывает, что соединение с процессом было принято, но никогда не показывает сообщение.