2015-11-06 169 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