当前位置: 首页 > 知识库问答 >
问题:

Netty WriteAndFlush方法不起作用

杨雪松
2023-03-14

看下面的代码:

public final class SecureChatClient {

static final String HOST = System.getProperty("host", "127.0.0.1");
static final int PORT = Integer.parseInt(System.getProperty("port", "8992"));

public static void main(String[] args) throws Exception {
    // Configure SSL.
    final SslContext sslCtx = SslContext.newClientContext(InsecureTrustManagerFactory.INSTANCE);

    EventLoopGroup group = new NioEventLoopGroup();
    try {
        Bootstrap b = new Bootstrap();
        b.group(group)
         .channel(NioSocketChannel.class)
         .handler(new NetworkInitializer(sslCtx));

        // Start the connection attempt.
        Channel ch = b.connect(HOST, PORT).sync().channel();

        // Read commands from the stdin.
        ChannelFuture lastWriteFuture = null;
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        //does not work
        ch.writeAndFlush("hi");
        while (true) {
            String line = in.readLine();
         if (line == null) {
            break;
            //(goes to if writefuture !=null)
            }

            // Sends the received line to the server.
            lastWriteFuture = ch.writeAndFlush(line + "\r\n");

        }

        // Wait until all messages are flushed before closing the channel.
        if (lastWriteFuture != null) {
            lastWriteFuture.sync();
        }
    } finally {
        // The connection is closed automatically on shutdown.
        group.shutdownGracefully();
    }
}}

该代码是从 netty 的安全聊天客户端类 http://netty.io/wiki/user-guide-for-4.x.html 修改而来的,并添加了行

            ch.writeAndFlush("hi");

在while循环之前。服务器上的输出不读取该行。我不明白为什么会这样,对我来说,ch.writeandflush方法本身似乎在循环之外不起作用。

如果我不应该在循环之外使用ch.writeandlfush,有没有更好的方法在启动时向服务器发送消息?

解决方案:所有writeandflush语句都必须以“\r\n”结尾才能刷新。如果没有,他们不会冲水。我不明白为什么会这样。

代码解决方案:ch.writeAndFlush(“hi\r\n”);

共有2个答案

程城
2023-03-14

解决方案:所有writeandflush语句都必须以“\r\n”结尾才能刷新。如果没有,他们不会冲水。我不明白为什么会这样。

代码解决方案:ch.writeAndFlush(“hi\r\n”);

鄂和璧
2023-03-14

您应该检查writeAndFlush(...)告诉你。我打赌你会得到某种例外。

 类似资料:
  • 问题内容: 我正在学习有关Java的知识,并且一直困扰着这个问题:当我尝试使用简单的方法(例如)时,编译器给我错误。这是代码: 该方法在Javadoc中定义。 这样做应该很简单,但是我真的不知道我在做什么错。 问题答案: 您已经创建了自己的类,并且没有使用内置的Java类。您尚未定义。

  • 问题内容: 我有一个像这样开始的函数: 我正在输入字符串“ 1 + 2 * 3 ** 4”,但是return语句根本没有删除空格,我也不知道为什么。我什至没有运气尝试过.replace()。 问题答案: Strip不会在所有地方(仅在开头和结尾)删除空格。尝试这个: 在这种情况下使用是多余的(显然,感谢评论员!)。 在我休息之前(感谢OP!)的PS Bonus有用片段:

  • 我已经覆盖了和所以我不太确定出了什么问题。它们是使用 Eclipse 生成的(来源 -

  • 我使用HttpURLConnection通过POST向服务器发送数据。我设置标头,然后获取输出流并写入一些字节,然后关闭输出流。 我试图从给定的网址获取时间表细节的下一页。但是有些我怎么也得不到结果。请帮助任何人,如果你知道这个代码中的任何问题。 我看到的是有错误的第一页,而不是第二页。"您选择的电台组合无效。请致电LIRR旅游信息中心,电话号码是(718) 217-5477,向客服代表咨询更多信

  • 问题内容: 我对Spring 3.2.3 @Transactional注解有疑问。我的服务类如下所示: 如果我调用persist()方法,所有方法都可以正常工作。但是,如果我在类级别将@Transactional注释掉- 事务将不会启动。谁能告诉我为什么Spring只能在methol级忽略@Transactional? 问题答案: 您不能从processDisclosureData()调用pers

  • 问题内容: 今天,我遇到了一个有趣(非常令人沮丧)的方法问题,该问题导致我认为是一个经过良好测试的类崩溃了,并导致了一个错误,使我花了很长时间来追踪。 为了完整起见,我没有使用IDE或调试器-只是老式的文本编辑器和System.out。时间非常有限,这是一个学校项目。 无论如何- 我开发一个基本的购物车可能包含的Book对象。为了贯彻落实,以及对车的方法,我想检查,如果在已经存在。所以我走了 在测