gpt4 book ai didi

java - Camel Netty UDP监听器监听0.0.0.0并且不接收数据包

转载 作者:行者123 更新时间:2023-12-03 05:13:15 35 4
gpt4 key购买 nike

我对 Camel、Netty 和 UDP 很陌生,但我已经研究了一段时间,但仍然不明白发生了什么。

我想做的就是使用 Camel 和 Netty 实现 UDP 监听器(目前在 Windows 7 上,但将把项目转移到 Linux)。我的spring配置如下:

<camel:camelContext id="test">
<camel:route>
<camel:from uri="netty:udp://localhost:5150?sync=false"/>
<camel:to uri="log:cameltest?level=DEBUG"/>
<camel:to uri="file://outbox"/>
</camel:route>
</camel:camelContext>

监听器似乎启动良好(通过 Eclipse 运行)。但是,当我执行 netstat 时,我看到了以下内容:

UDP    0.0.0.0:5150
UDP [::ffff:127.0.0.1]:5150

当我期望它在 127.0.0.1 上监听时。我在网上读到的任何内容都不清楚这是否是 Camel/Netty/UDP 的预期行为。

我正在通过从 Java NIO UDP 客户端发送来测试这一点。如果 NIO UDP 服务器正在监听,它会正常接收数据包(全部通过本地主机完成)。

我还测试了 Camel/Netty/TCP 监听器,效果很好。

为什么监听器监听所有本地地址?如果是这样,为什么它没有从本地主机接收我的数据包?

最佳答案

我明白了。这是我最后的 Spring 背景:

<bean class="org.jboss.netty.handler.codec.string.StringDecoder" id="stringDecoder">
<constructor-arg value="ISO_8859_1" />
</bean>

<camel:camelContext id="test">
<camel:route>
<camel:from uri="netty:udp://localhost:5150?decoder=#stringDecoder&amp;disconnectOnNoReply=false&amp;sync=false"/>
<camel:to uri="log:cameltest?level=DEBUG"/>
<camel:to uri="file://outbox"/>
</camel:route>
</camel:camelContext>

在对 UDP 和 Netty 进行一些研究后,我发现监听 0.0.0.0:[port#] 似乎是 Netty/UDP 的默认行为。有关 0.0.0.0 含义的更多信息,see this link .

一位程序员同事建议(因为我本质上是在框架中使用框架),取出 Camel 的东西并尝试让它在 Netty 中工作。我尝试了这个,我能够让它工作,并且还能够从我的 NIO UDP 客户端发送给它。有一段时间我认为问题出在 Camel 上,因为我看不出 Netty 实现有什么问题。

在 Netty/UDP、Camel/TCP 和“损坏的”Camel/UDP 中进行数小时的逐步调试后,我注意到 Camel Netty 实现使用了来自org.jboss 包来绑定(bind)连接。在我的 Netty 实现中,我使用了 io.netty 包中的 Bootstrap。

我从 http://massapi.com/class/org/jboss/netty/bootstrap/ConnectionlessBootstrap.java.html 找到了一个使用 ConnectionlessBootstraporg.jboss 包的示例。当我让它工作时,我将实现与我的实现进行了比较,并注意到他的两端都有编码器和解码器。这就是我想到向监听器添加 CharsetUtil.ISO_8859_1 解码器并设法使项目正常运行的想法。

我还注意到我一次只能发送一次。将属性 disconnectOnNoReply 设置为 false 允许监听器在不断开连接的情况下多次接收。

希望这对将来的人有所帮助。 :)

[编辑]实际上经过进一步测试,“disconnectOnNoReply”可能不需要。我只是在没有它的情况下尝试了它并且它有效。

关于java - Camel Netty UDP监听器监听0.0.0.0并且不接收数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15124571/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com