我尝试使用Spring集成实现UDP服务器,就像它描述的here一样,但是当客户端在NAT后面工作时,它们将永远不会收到来自服务器的响应。这是因为服务器应该从与UDP适配器端口相同的端口发送响应数据报(通过NAT解释UDP,解释为here)。Spring集成UDP服务器,用于NAT后面的客户端
如何使用Spring Integration与NAT后面的客户端实现正确的UDP通信?
我尝试使用Spring集成实现UDP服务器,就像它描述的here一样,但是当客户端在NAT后面工作时,它们将永远不会收到来自服务器的响应。这是因为服务器应该从与UDP适配器端口相同的端口发送响应数据报(通过NAT解释UDP,解释为here)。Spring集成UDP服务器,用于NAT后面的客户端
如何使用Spring Integration与NAT后面的客户端实现正确的UDP通信?
正如那些线索所讨论的那样;目前没有任何UDP的网关,只有通道适配器。网关用于双向集成。
多年来,UDP网关一直没有任何需求。
我们做了make some changes以方便用户回复收到的消息(通过添加发送端口作为标头)。
这将允许您构建一个DatagramPacket
(可能使用SI DatagramPacketMessageMapper
)并使用您自己的代码将其发送到原始系统。
如果您希望我们重新考虑提供UDP网关,请对JIRA Issue发表评论。更好的是,考虑contributing。
编辑
对于异步发送你并不需要一个网关;买你需要调整内置到出站适配器中的映射器和消息处理程序。
更改DatagramPacketMessageMapper
here以使用消息标头设置socketAddress
;并为UnicastSendingMessageHandler
添加一个选项,以便它不会无条件地设置destinationAddress
here。
您可以通过继承处理程序并覆盖send()
方法来完成此操作。
然后,您可以使用ref
属性将自定义消息处理程序连接到<service-activator/>
。
哇!非常快速的答案谢谢你加里!我想贡献很多。或者至少尝试一下。我阅读了贡献者的一般规则,但是您能否指出我可以基于的某种网关示例?或者给我一些快速的建议,我应该在现有的SI代码中看看? 我必须能够从'udp-inbound-channel-adapter'端口发送相同端口的响应。我也必须能够异步地从服务器发送数据报到客户端。 – yu55
请参阅编辑我的答案。 –
谢谢你加里。希望不久我会试着弄清楚一些事情。 – yu55