我已经为Arduino设置了一个接收UDP数据包并向这些数据包发送简单响应的程序。出于某种原因,我的Android应用程序无法通过公共互联网接收响应。如果我将手机与WLAN连接,我的应用程序会收到响应。在所有情况下,Arduino都能够接收Android发送的这些数据包,因为我已为此端口分配了一个端口转发器。
我还检查了我的ISP网站是否存在可能的端口限制。我在家里连接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();
...
答案 0 :(得分:0)
使用Whan NAT,您必须将UDP数据包转发到原始设备。我怀疑移动服务提供商会这样做。
因此,使用UDP在移动环境中从互联网上获得回复将非常困难。
答案 1 :(得分:0)
有关此主题的大量信息。您正在寻找的搜索词是&#34;打孔&#34;或者&#34; UDP打孔&#34;。
A StackOverflow for good measure
我和你有类似的问题。在如何连接我的手机和小型设备的过程中,我正在寻找Twitter和聊天服务之间的某种方式。你如何发送小的私人消息,但只是指向点?