gpt4 book ai didi

java - 带有 Spring 集成的 UDP 服务器

转载 作者:搜寻专家 更新时间:2023-11-01 03:26:30 27 4
gpt4 key购买 nike

我想知道是否可以使用 spring-integration 框架创建一个能够接受请求并返回响应的 UDP 服务器。

对于 TCP,有允许请求/响应处理的 TCP 网关,但我没有看到 UDP 有类似的东西。

设置 UDP 监听器和接收数据包很容易,但我看不到如何返回响应,因为我只能将其路由到预定义的输出 channel 。

我也看不到发件人的 IP 和端口,因为转换器不接收 DatagramPacket 对象,而只接收数据。

这是我的配置:

<int:channel id="ChannelIn" />

<ip:udp-inbound-channel-adapter id="ChannelReceiver"
channel="ChannelIn"
port="5555"
multicast="false"
check-length="false"
pool-size="10"
/>

<int:transformer
ref="datagramToPacketTransformer"
input-channel="ChannelIn"
output-channel="ChannelSA"
method="toPacket"/>

<int:channel id="ChannelSA" />

<int:service-activator id="ChannelActivator"
input-channel="ChannelSA"
ref="PacketHandler"
method="process"
/>

最佳答案

我找到了 n 种处理 UDP 的方法。下面是我的配置

<int-ip:udp-inbound-channel-adapter id="ChannelReceiver"
channel="serverBytes2StringChannel"
port="9000"
multicast="false"
check-length="false"
pool-size="10"
lookup-host="false"
/>

<int:transformer id="serverBytes2String"
input-channel="serverBytes2StringChannel"
output-channel="udpSA"
expression="new String(payload)"

/>

<int:service-activator input-channel="udpSA"
ref="deviceService"
method="udpMessage"/>

deviceService bean 有这段代码:

 public Message udpMessage(Message message) {
String response = "KO";
try {
response = process(message);
} catch (Throwable th) {
//do something
}
Message msg = MessageBuilder.withPayload(response.getBytes()).copyHeaders(message.getHeaders()).build();
sendReply(msg);
return null;
}
private void sendReply(Message message) {
try {
int port = (Integer) message.getHeaders().get("ip_port");
String ip = (String) message.getHeaders().get("ip_address");
InetAddress IPAddress = InetAddress.getByName(ip);

byte[] sentence = (byte[]) message.getPayload();
byte[] sendData = new byte[sentence.length];
byte[] receiveData = new byte[1024];
sendData = sentence;
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
DatagramSocket clientSocket = new DatagramSocket();
clientSocket.send(sendPacket);
clientSocket.close();
} catch (Exception ex) {
throw new RuntimeException("KO");
}
}

这在我的个人计算机上运行良好,但是当我在 Amazon AWS 上部署此代码时它无法运行。我发现即使程序正在监听 UDP 9000 端口,但服务器端没有收到任何通信。这可能是 AWS 设置的问题,尽管我已允许该 AWS 实例的所有 UDP 端口。

关于如何在 Amazon AWS 上进行这项工作的任何提示?

关于java - 带有 Spring 集成的 UDP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623394/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com