Java Netty客户端不发送数据
我正在尝试开发一个RESTAPI客户机服务器。我的客户机使用Java,Netty和我的服务器使用golang。 目前,我遇到了一个非常奇怪的问题,我的客户端在某些情况下不向服务器发送POST请求数据 详情如下: -我的客户代码的一部分: 自举Java Netty客户端不发送数据,java,client-server,netty,Java,Client Server,Netty,我正在尝试开发一个RESTAPI客户机服务器。我的客户机使用Java,Netty和我的服务器使用golang。 目前,我遇到了一个非常奇怪的问题,我的客户端在某些情况下不向服务器发送POST请求数据 详情如下: -我的客户代码的一部分: 自举 Bootstrap b = new Bootstrap() .group(group) .channel(NioSocketChannel.class) .op
Bootstrap b = new Bootstrap()
.group(group)
.channel(NioSocketChannel.class)
.option(ChannelOption.TCP_NODELAY, true)
.option(ChannelOption.SO_KEEPALIVE, true)
.remoteAddress(Host, Port)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) {
ch.pipeline()
.addLast(new HttpClientCodec())
.addLast(new ClientHandler());
}
});
return b.connect().syncUninterruptibly().channel();
-我从调试中得到的一些信息
- 当我在IntelliJ中运行代码时,一切正常,这只会发生 将其构建到jar文件并从jar文件运行时
- 当我用wireshark捕获包时,TCP握手成功,但是 没有发送POST数据
- 我认为这与请求数据的数据长度有关 长度小于150字节,则一切正常
- Netty还报告发送操作已完成(如“发送已完成”) 显示在我的日志文件中)
任何帮助都将不胜感激 我遇到了一个问题,netty在使用异步方式时会吞下异常,甚至用“Send completed!”来完成未来。但是我的wireshark日志只显示了SYN->SYN,ACK->ACK流 我的代码如下:
ChannelFuture channelFuture = channel.writeAndFlush(new byte[10]);
channelFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
logger.info("Send completed!");
}
});
在我将代码更改为synchron之后,如下所示:
channel.writeAndFlush(new byte[10]).sync();
我最终发现实际上有一个错误:
[11:58:50][WARN]xx.xxxx.xxxxx.ProxyClient.operationComplete()引发异常
java.lang.UnsupportedOperationException:不支持的消息类型:[B(应为ByteBuf,FileRegion)
原来我需要writeAndFlush(unmooled.wrappedBuffer(新字节[10]))
包装我的数组
所以我学到的是异步方式会很高兴地告诉您它成功了
但等一下,我发现它很可能没有吞下任何异常,只是我没有检查它
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if(!future.isSuccess()){
logger.info(future.cause());
}
}
因此,如果您将未来的侦听器更改为检查issucess()
,并打印原因,它将显示相同的错误
我希望如果你检查一下你的未来,也许你也能发现原因。我遇到了一个问题,netty在使用异步方式时会吞下异常,甚至用“发送完成!”来完成未来。但是我的wireshark日志从来没有显示过SYN->SYN,ACK->ACK流 我的代码如下:
ChannelFuture channelFuture = channel.writeAndFlush(new byte[10]);
channelFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
logger.info("Send completed!");
}
});
在我将代码更改为synchron之后,如下所示:
channel.writeAndFlush(new byte[10]).sync();
我最终发现实际上有一个错误:
[11:58:50][WARN]xx.xxxx.xxxxx.ProxyClient.operationComplete()引发异常
java.lang.UnsupportedOperationException:不支持的消息类型:[B(应为ByteBuf,FileRegion)
原来我需要writeAndFlush(unmooled.wrappedBuffer(新字节[10]))
包装我的数组
所以我学到的是异步方式会很高兴地告诉您它成功了
但等一下,我发现它很可能没有吞下任何异常,只是我没有检查它
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if(!future.isSuccess()){
logger.info(future.cause());
}
}
因此,如果您将未来的侦听器更改为检查issucess()
,并打印原因,它将显示相同的错误
我希望如果你审视你的未来,也许你也能发现原因