0

我想通过wifi发送设备IP地址之类的数据......为了实现目标,我编写了以下代码

 public void run() {
        try {
          DatagramSocket socket = new DatagramSocket(DISCOVERY_PORT);
          socket.setBroadcast(true);
          socket.setSoTimeout(TIMEOUT_MS);

          sendDiscoveryRequest(socket);
          listenForResponses(socket);
        } catch (IOException e) {
          Log.e(TAG, "Could not send discovery request", e);
        }
      }

  public void sendDiscoveryRequest(DatagramSocket socket) throws IOException {
        String data = "Test Data";
        Log.d(TAG, "Sending data " + data);

        DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),
            getBroadcastAddress(), DISCOVERY_PORT);
        socket.send(packet);
      }

    public void listenForResponses(DatagramSocket socket) throws IOException {
        byte[] buf = new byte[1024];
        try {
          while (true) {
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
            String s = new String(packet.getData(), 0, packet.getLength());
            Log.d(TAG, "Received response " + s);
          }
        } catch (SocketTimeoutException e) {
          Log.d(TAG, "Receive timed out");
        }
      }

    InetAddress getBroadcastAddress()
    {
      try
      {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        DhcpInfo dhcp = wifi.getDhcpInfo();
        // handle null somehow

        int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
        byte[] quads = new byte[4];
        for (int k = 0; k < 4; k++)
          quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
        return InetAddress.getByAddress(quads);
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
      return null;
    }

但它返回它当前正在运行的设备的IP地址......并接收它发送的相同数据......任何方式发送数据和接收数据到wifi连接的android设备?请在这件事上给予我帮助...

4

0 回答 0