简体   繁体   English

响应UDP广播

[英]Respond to UDP broadcast

I am making an Android app that responds to a UDP broadcast with its IP. 我正在制作一个Android应用,以其IP响应UDP广播。 This is the code: 这是代码:

 byte[] buf = new byte[128];
 final DatagramPacket packet = new DatagramPacket(buf, buf.length);
 listenSocket.receive(packet);

 Toast.makeText(network, "UDP connection detected.", Toast.LENGTH_LONG).show();
 if (packet.getData()[0] == 0x1 && packet.getData()[1] == 0x42) { //respond to broadcast:
      String ip = Utils.getIP() + ":" + COMM_PORT + "\r\n";
      final byte[] send = new byte[32];
      send[0] = 0x1;
      send[1] = 0x43;
      System.arraycopy(ip.getBytes(), 0, send, 2, 20);
      Toast.makeText(network, Arrays.toString(send), Toast.LENGTH_LONG).show();
      Toast.makeText(network, "IP address is null?" + (listenSocket.getInetAddress() == null), Toast.LENGTH_LONG).show(); // this prints IP address is null?true to the console

      DatagramPacket confirm = new DatagramPacket(send, send.length, listenSocket.getRemoteSocketAddress()); //FAILS HERE
      listenSocket.send(confirm);
      listenSocket.close();
 }

Instead of DatagramPacket confirm = new DatagramPacket(send, send.length, listenSocket.getRemoteSocketAddress()); 而不是DatagramPacket confirm = new DatagramPacket(send, send.length, listenSocket.getRemoteSocketAddress()); I have tried: 我努力了:

DatagramPacket confirm = new DatagramPacket(send, send.length, listenSocket.getInetAddress(), listenSocket.getPort());

but getPort() gives -1 (indicating socket is not connected) and getInetAddress() gives null, also indicating it is not connected. 但是getPort()给出-1(指示套接字未连接),而getInetAddress()给出null,也表明它未连接。

How do I respond to a UDP broadcast connection? 如何响应UDP广播连接?

Thanks 谢谢

I have the solution! 我有解决方案!

You have to get the IP address and port from the received DatagramPacket; 您必须从收到的DatagramPacket中获取IP地址和端口。

DatagramPacket confirm = new DatagramPacket(send, send.length, receivedPacket.getAddress(), receivedPacket.getPort());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM