如何设置/覆盖出站数据报包的源端口?

时间:2016-05-23 21:13:57

标签: java sockets networking udp iot

我的设备配置了公共静态IP,通过UDP报告车辆GPS数据。设备可以发送事件,接收命令和发送命令确认。

我有一个应用程序可以打开一个数据报套接字并侦听入站设备事件,比如说端口X.

当设备发送事件时,我的应用程序接收并处理该消息没问题。我遇到的问题是发送ACK'd命令。出于可伸缩性/性能原因,我将设备ACK处理为常规事件。 (即应在端口X上发送ACK)当我的应用发送命令时,我需要将响应确认重定向回我的应用事件监听器。现在,设备正在回复原始数据包的源IP /端口而不是端口X,因此我的应用程序永远不会收到命令确认。

我想我的问题是,有没有办法重载传出的UDP头以使用端口X,即使该端口已经绑定到套接字?是否有一些技巧可以在较低的级别如iptables进行移植?我是否需要一些代理或转发代理才能坐在我的应用程序前面来管理数据包路由?是否可以通过同一套接字连接发送命令和接收事件?

解决此问题的最佳方法是什么?我的应用程序基于Apache Camel并使用2个路由..一个用于事件,另一个用于命令。如果在Camel中有解决方法可能吗?

由于

1 个答案:

答案 0 :(得分:0)

我不知道您为什么要使用单独的端口发送ACK,但答案不是。从发送其他所有内容的同一端口发送它们。

  

作为常规事件(即应在端口X上发送ACK)

Non sequitur。'定期活动'并不意味着应该在X'。

上发送