【问题标题】:Udp broadcasting in Android And Receving broadcast from the networkAndroid中的udp广播和从网络接收广播
【发布时间】:2018-03-25 09:33:35
【问题描述】:

我必须在 Android 中发送 UDP 广播。我总是在 socket.send(packet) 收到 java.io.IOException: Invalid argument。 创建套接字对象时,我有时会得到 Address already in use 异常

我的代码完整代码是(编辑 2):

     private void setBroadCastMessage() {
    final int udpPortNumber = 6000;
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getActiveNetworkInfo();
    if (mWifi.getType() == ConnectivityManager.TYPE_WIFI) {

        if (mWifi.isConnected()) {


            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        try {
                            InetAddress address;
                            address=InetAddress.getByName("255.255.255.255");
                            DatagramSocket datagramSocket = new DatagramSocket(udpPortNumber,address);
                            messageBroadCast(datagramSocket,address);

                        } catch (SocketException e) {
                            e.printStackTrace();
                        }

                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            });

            thread.start();


        }

    }
}
public void messageBroadCast(DatagramSocket socket, InetAddress address)
{


    String data="This is my discovery request";
    DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),
            address, 6000);
    try {
        socket.send(packet);
        LogUtils.errorLog("Address :"," "+address);
        LogUtils.errorLog("Send String:"," "+data);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

【问题讨论】:

  • 您的代码看起来不错。也许发布堆栈跟踪
  • 这段代码甚至无法编译。
  • 我不认为这是一个完整的示例,因为socket 没有定义,但假设套接字已设置,它肯定可以编译。
  • @Kuffs 如果没有socket的定义,它不能'肯定编译',但是无论如何都会有一个错误'address可能没有被初始化'。跨度>
  • 对,它的编译并在运行时给出异常。作为参考,我还为代码编写代码:DatagramSocket socket = null;尝试 { socket = new DatagramSocket(6000,address); } catch (SocketException e) { e.printStackTrace(); }

标签: java android sockets udp broadcast


【解决方案1】:

无法真正将其发布为评论,但这是我使用的代码,它与您的代码非常相似。

如果您还有其他问题,请尝试此操作并将您的堆栈跟踪添加到问题中。

我用这个成功广播到IP地址“255.255.255.255”

private void sendToIP(String ip, int port, String message) {

    try {

        DatagramSocket socket = new DatagramSocket();
        byte[] sendData = message.getBytes();
        InetAddress IPAddress = InetAddress.getByName(ip);
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
        socket.send(sendPacket);


    } catch (Exception e) {
        e.printStackTrace();
    }

}

【讨论】:

    【解决方案2】:

    如果您想广播,您可能需要致电DatagramSocket.setBroadcast(true)。但是您在此处尝试的广播类型已被弃用 20 多年。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多