Java Netty客户端不发送数据

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

我正在尝试开发一个RESTAPI客户机服务器。我的客户机使用Java,Netty和我的服务器使用golang。 目前,我遇到了一个非常奇怪的问题,我的客户端在某些情况下不向服务器发送POST请求数据

详情如下:

-我的客户代码的一部分:

自举

      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()
,并打印原因,它将显示相同的错误

我希望如果你审视你的未来,也许你也能发现原因