当前位置: 首页 > 知识库问答 >
问题:

用于NAT后客户端的Spring Integration UDP服务器

施振海
2023-03-14

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

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

共有1个答案

锺离旻
2023-03-14

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

多年来对UDP网关没有任何需求。

我们确实做了一些更改,以方便用户回复传入消息(通过添加发送端口作为头)。

这将允许您构造DatagramPacket(可能使用SIDatagramPacketMessageMapper),并使用自己的代码将其发送到始发系统。

如果您希望我们重新考虑提供UDP网关,请在JIRA问题上发表评论。更好的是,考虑贡献。

编辑

对于异步发送,你不需要网关;但是您需要调整内置于出站适配器中的映射器和消息处理程序。

在此处更改数据报数据包消息映射器以使用消息标头设置套接字地址;并向单播发送消息处理程序添加一个选项,以便它不会在此处无条件地设置目标地址

您可以通过对处理程序进行子类化并重写 send() 方法来执行此操作。

然后,您可以将定制的消息处理程序连接到< code >中

 类似资料:
  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 我正在尝试使用UDP在服务器(在公共IP上)和客户端(通过NAT)之间进行双向通信。我的逻辑是,如果服务器向IP和它接收数据包的端口发送一些数据,客户端仍然应该得到它,因为NAT最终会有将数据包发送到客户端的映射。 客户端有 2 个进程,一个用于发送数据包,另一个进程用于接收数据。服务器继续等待数据,如果它获得数据,它会将数据发送回从接收数据的端口和 IP。 客户代码如下: client_recv

  • 我编写UDP服务器,为NAT后面的客户端提供服务。 客户端将请求发送到公共IP和一些预定义的端口。服务器接收消息,创建(从池获取)线程并将消息传递给线程(处理程序)。 问题:我可以使用新的套接字(不同的端口)来发送响应,还是应该使用接收请求的相同端口(套接字)?

  • mysqladmin是一个执行管理操作的客户程序。可以用它来检查服务器的配置和当前的状态,创建并删除数据库等等。 这样调用mysqladmin: shell> mysqladmin [options] command [command-options] [command [command-options]] ... mysqladmin支持下面的命令: ·create db_name 创建一个名为

  • 我使用Spring Boot开发了这个websocket服务器。服务器与基于js的客户机配合得很好。 控制器: 这是服务器端。现在,对于客户机,我已经创建了一个@ClientEndpoint,当我连接到URI“ws://localhost:8080/spring-mvc-java/chat”时,我能够建立一个连接,并且可以看到@ClientEndpoint的@OnOpen回调被触发。 但是,use

  • 前面的章节介绍了所有 Redis 的重要功能组件: 数据结构、数据类型、事务、Lua 环境、事件处理、数据库、持久化, 等等, 但是我们还没有对 Redis 服务器本身做任何介绍。 不过, 服务器本身并没有多少需要介绍的新东西, 因为服务器除了维持服务器状态之外, 最重要的就是将前面介绍过的各个功能模块组合起来, 而这些功能模块在前面的章节里已经介绍过了, 所以本章将焦点放在服务器的初始化过程,