Я создал программу для Arduino для приема UDP-пакетов и отправки простого ответа на эти пакеты. По какой-то причине мое приложение для Android не может получить ответ в общедоступном Интернете. Если я подключу свой телефон к WLAN, мое приложение получит ответ. Во всех случаях Arduino может получать эти пакеты, отправленные Android, потому что я назначил переадресацию портов для этого порта.Приложение Java не может получать пакеты UDP через Интернет
Я также проверил сайт своего интернет-провайдера на предмет возможных ограничений портов. Мое проводное соединение дома, где подключено Arduino, имеет открытый IP-адрес без ограничений на этот порт. У моего поставщика мобильного широкополосного подключения нет ограничений на этот порт, но они используют NAT для мобильных соединений. Может это проблема?
На Android У меня есть следующий код:
byte[] data = ("data").getBytes();
try {
DatagramPacket packet = new DatagramPacket(data, data.length, arduinoAddress, arduinoPort);
socket.send(packet);
byte[] receiveData = new byte[1];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
System.out.println(new String(receivePacket.getData()));
} catch(InterruptedIOException e) {
e.printStackTrace();
return 2;
} catch(IOException e) {
e.printStackTrace();
}
Arduino имеет следующее:
void loop() {
int packetSize = UDP.parsePacket();
if(packetSize) {
UDP.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
String data = String(packetBuffer);
for(int i = 0; i < UDP_TX_PACKET_MAX_SIZE; i++) {
packetBuffer[i] = 0;
}
Serial.println(data);
UDP.beginPacket(UDP.remoteIP(), UDP.remotePort());
UDP.print("1");
UDP.endPacket();
...