2015-11-06 54 views
3

我尝试使用Spring集成实现UDP服务器,就像它描述的here一样,但是当客户端在NAT后面工作时,它们将永远不会收到来自服务器的响应。这是因为服务器应该从与UDP适配器端口相同的端口发送响应数据报(通过NAT解释UDP,解释为here)。Spring集成UDP服务器,用于NAT后面的客户端

如何使用Spring Integration与NAT后面的客户端实现正确的UDP通信?

回答

1

正如那些线索所讨论的那样;目前没有任何UDP的网关,只有通道适配器。网关用于双向集成。

多年来,UDP网关一直没有任何需求。

我们做了make some changes以方便用户回复收到的消息(通过添加发送端口作为标头)。

这将允许您构建一个DatagramPacket(可能使用SI DatagramPacketMessageMapper)并使用您自己的代码将其发送到原始系统。

如果您希望我们重新考虑提供UDP网关,请对JIRA Issue发表评论。更好的是,考虑contributing

编辑

对于异步发送你并不需要一个网关;买你需要调整内置到出站适配器中的映射器和消息处理程序。

更改DatagramPacketMessageMapperhere以使用消息标头设置socketAddress;并为UnicastSendingMessageHandler添加一个选项,以便它不会无条件地设置destinationAddresshere

您可以通过继承处理程序并覆盖send()方法来完成此操作。

然后,您可以使用ref属性将自定义消息处理程序连接到<service-activator/>

+0

哇!非常快速的答案谢谢你加里!我想贡献很多。或者至少尝试一下。我阅读了贡献者的一般规则,但是您能否指出我可以基于的某种网关示例?或者给我一些快速的建议,我应该在现有的SI代码中看看? 我必须能够从'udp-inbound-channel-adapter'端口发送相同端口的响应。我也必须能够异步地从服务器发送数据报到客户端。 – yu55

+0

请参阅编辑我的答案。 –

+0

谢谢你加里。希望不久我会试着弄清楚一些事情。 – yu55