Я - разработчик Java и в настоящее время использую Springboot 2.7 для разработки моей программы в Windows 10. Я никогда не использовал протокол UDP для разработки до < /p>
В настоящее время мы используем многоадресную функцию протокола UDP для отправки данных по многоадресному адресу < /p>
, но передача не удалось, с основной ошибкой, вызванной По : java.net.sockerexception : Неиззнанная Ошибка сокетов Windows: 5 Datagram отправлена неудачная < /p>
Я пробовал несколько способов отправки. Следующий код: < /p>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.ip.udp.MulticastReceivingChannelAdapter;
import org.springframework.integration.ip.udp.MulticastSendingMessageHandler;
import java.nio.charset.StandardCharsets;
@Configuration
public class UDPConfig {
private static final String MULTICAST_ADDRESS = "224.1.1.100";
private static final int PORT = 12345;
@Bean
public MulticastReceivingChannelAdapter multicastAdapter() {
MulticastReceivingChannelAdapter adapter =
new MulticastReceivingChannelAdapter(MULTICAST_ADDRESS, PORT);
adapter.setOutputChannelName("udpChannel");
return adapter;
}
@Bean
public MulticastSendingMessageHandler messageHandler() {
return new MulticastSendingMessageHandler("224.1.1.100", 12345);
}
@Bean
public IntegrationFlow udpInboundFlow(ObjectMapper objectMapper) {
return IntegrationFlows.from("udpChannel")
.transform(payload -> new String((byte[]) payload, StandardCharsets.UTF_8)) // to str
.transform(json ->
{
try {
return objectMapper.readValue(json, String.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
)
.handle(message -> {
String str = (String) message.getPayload();
System.out.println("str: " + str);
})
.get();
}
}
< /code>
import fun.yyds.service.sys.UdpService;
import org.springframework.integration.ip.udp.MulticastSendingMessageHandler;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
/**
* @description: SysServiceImpl
* @author: Chensn
* @time: 2024/10/31
*/
@Service
public class UdpServiceImpl implements UdpService {
@Resource
private MulticastSendingMessageHandler multicastSender;
private MulticastSocket multicastSocket;
public void send(String json) {
byte[] payload = json.getBytes(StandardCharsets.UTF_8);
multicastSender.handleMessage(
MessageBuilder.withPayload(payload).build()
);
System.out.println("msg:"+json);
}
public void send2(String json) throws IOException {
byte[] bytes = json.getBytes();
multicastSocket = new MulticastSocket();
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("224.1.1.100"), 12345);
multicastSocket.send(datagramPacket);
}
}
< /code>
The following is a detailed error report:
Failed to sent UDP packet in the [bean 'multcastSender' ;define in 'class path resource [com/gz/config/UdpConfig.class]']; from source : 'com.gz.config.UdpConfig.multcastSender()'nestde exception is java.net.SocketExpection :Unrecognized Windows Sockets error: 5 Datagram sent failed
I have tried using administrator mode to start the program, switched multiple different IPs and ports, and closed the firewall. The startup parameter has been added with - Djava.net.refererIPv4Stack=true
Подробнее здесь: https://stackoverflow.com/questions/797 ... ent-failed