我正在试用netty,但当我响应时,客户端似乎没有收到我的消息。我使用Java NIO和socketChannel编写了相同的代码,看起来很好。我这样说是因为客户机会记录我发送的任何内容。下面是我的服务器
public class Server{
public void init(final int port){
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_REUSEADDR, true)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) {
ChannelPipeline p = ch.pipeline();
p.addLast(new ServerHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
ChannelFuture f = bootstrap.bind("localhost", port).sync();
f.channel().closeFuture().sync();
} catch (InterruptedException e) {
System.out.println("Server encountered an InterruptedException");
e.printStackTrace();
} finally {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
下面是我的服务器处理程序
public class ServerHandler extends ChannelInboundHandlerAdapter {
public static Logger LOG = LoggerFactory.getLogger(UTPServerHandler.class);
final int LEN = 1028;
private ByteBuf byteBuf;
private MyDecoder myDecoder;
@Override
public void handlerAdded(ChannelHandlerContext ctx) {
byteBuf = ctx.alloc().buffer(MAX_PACKET_LENGTH);
myDecoder = new MyDecoder();
}
@Override
public void handlerRemoved(ChannelHandlerContext ctx) {
byteBuf.release();
byteBuf = null;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
byteBuf = (ByteBuf) msg;
myDecoder.decodeMessage(byteBuf, ctx); //This is where I try to decode which message and respond. I pass ctx along so I know which to reponsd to. See sample response below
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
System.out.println"Got an exception...");
ctx.close();
}
}
示例响应:
public static void dummyResponse(ChannelHandlerContext ctx, int test){
ByteBuf response = Unpooled.buffer(32);
response.writeByte(test);
response.writeByte(test);
response.writeByte(test);
response.writeByte(test);
response.writeByte(test);
ctx.channel().writeAndFlush(response);
}
我正在我的盒子上做一个tcpdump,我看到了我在电线上发送的内容,所以我不确定我做错了什么。而且,几分钟后,这会被记录下来,我不确定我在服务器或服务器处理程序中做了什么来抱怨这一点:
您会得到一个关于释放的消息,因为您在handlerAdded方法中分配了一个ByteBuf并将其分配给ByteBuf,然后在channelRead中将ByteBuf分配给传入的消息,导致第一个消息被垃圾收集而没有被释放。通过不在HandlerAdded中分配它来修复此问题。
我有一个netty服务器和客户端在项目中,希望他们之间交换消息。 服务器处理程序代码: 客户端处理程序代码: MessageDecoder代码: 服务器输出如下: 客户端输出如下: 所以从日志的输出可以看出,客户端向服务器端发送了10条消息,而服务器端只接收到一条消息。我的代码有什么问题吗?我想也许是我误用的原物?
问题内容: 这实际上是我在这里的第一篇文章,一段时间以来我一直在试图弄清楚这一点,但是我终于打电话给该旗帜,并将尝试寻求有关此主题的一些帮助。 因此,我有一个客户端和一个服务器,它们是根据回显客户端/服务器和安全聊天客户端/服务器建模的。我对聊天的SSL部分和使用回显仅对确保我在客户端/服务器之间收到响应不感兴趣。我将在这篇文章的底部添加所有相关代码。我现在遇到的问题是,在客户端连接后,我可以从服
当我提交表单时,我在浏览器控制台中看到“emit”消息,所以我知道表单提交事件正在触发,但我没有在服务器上收到测试消息。客户端或服务器端似乎什么也没发生,“socket.emit”函数似乎什么也没做。 我做错了什么?
我有一个Netty客户端和一个Netty服务器,并按照主要教程后,为了有一个EchoClient/服务器,我想让它,使我的客户端发送消息到我的服务器,当他第一次连接到它。 下面是我的的方法,这些方法应该解决这个问题: 但是正如你所看到的,教程使用了一个ByteBuf和一个String似乎不起作用! 下面是我如何在我的方法中显示收到的消息: 但是当为使用并在构造函数中初始化它并发送它时,我的服务器不
我用netty编写了一个应用程序,客户端用channelActive方法向服务器端发送字符串消息,而服务器端没有接收到字符串消息。我不知道原因。 服务器代码: 我用服务器处理程序的方法ChannelRead打印来自客户端的消息。 以下是客户端代码: 我从通道活动的客户端发送消息,但服务器没有接收消息,字符串“message from client”
我有一个使用Netty用Java设计的非常简单的服务器。我还使用Java NIO包编写了一个简单的客户端。我可以将Netty服务器与客户端连接起来,但当消息发送到服务器时,我会遇到以下例外情况: 我的输出: 我的服务器程序: 我的ServerHandler: 我的NIO Java客户端: 2)我正在使用LengthFieldBasedFrameDecoder和LengthPrepender来消除半