向局域网中的所有人发送 UDP 数据 Android

Send UDP data to all on the LAN Android

我可以将 UDP 数据发送到特定的 IP 地址,但我需要将其发送给监听端口 55555 的人。这是我正在使用的代码。我不想发送到特定的 ip。

import android.util.Log;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpServer implements Runnable {

    UdpServer() {
        run();
    }
    public void run() {

        try {

            String messageStr = "40320";

            int server_port = 55555;
            DatagramSocket datagramSocket = new DatagramSocket();
            InetAddress host = InetAddress.getByName("10.1.10.14");

            int msg_length = messageStr.length();
            byte[] message = messageStr.getBytes();
            DatagramPacket datagramPacket = new DatagramPacket(message, msg_length,host,
                    server_port);

            datagramSocket.send(datagramPacket);
        } catch (Exception e) {

        }
    }
}

广播会将数据发送到局域网中的所有设备。多播只会将数据发送给订阅它的人。从您提供的有限信息来看,听起来多播会起作用。如果您进行广播,您实际上是在向局域网中的所有设备发送数据,例如您的智能电视、所有笔记本电脑等。

这是一个使用 java 多播套接字的简单客户端服务器应用程序。http://examples.javacodegeeks.com/core-java/net/multicastsocket-net/java-net-multicastsocket-example/

通过多播,设备充当服务器并打开一种特殊的 udp 套接字进行多播。客户端订阅该服务器的多播套接字并实质上参与数据传输。

这里有一些关于多播的技巧

  • 确保服务器在您的 java 代码中使用多播地址。这在 224.0.0.0 - 239.255.255.255 范围内,一些地址是保留的。我发送的示例代码使用 224.0.0.3。您无需在 WIfi 设置中更改 IP。这是在 java 代码中完成的。它就像一个额外的地址,它将被监听。客户将订阅此地址。
  • 对于 android,您必须在清单文件中为多播锁启用多播许可。参见 http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html