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 インスタンスのすべての UDP ポートを許可しましたが、これは AWS セットアップの問題である可能性があります。
これを Amazon AWS で機能させる方法に関するヒントはありますか?