微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Android应用程序中通过UPD套接字接收数据

如何解决如何在Android应用程序中通过UPD套接字接收数据

我已经阅读了许多不同的帖子和问题,在我看来,这应该相对容易解决。我设法使用一个套接字对象将 UDP 数据包发送到正确的(地址、端口),但只能使用相同的套接字对象读取消息。这种行为可以在我的代码以及相应的输出中看到:

    GlobalScope.launch {
        val messageStr = "Hello Android!"
        val s = DatagramSocket(null)
        s.reuseAddress = true
        s.broadcast = true
        s.bind(InetSocketAddress(6670))
        s.soTimeout = 1500
        var local = InetAddress.getByName("0.0.0.0")
        val msg_length = messageStr.length
        val messageSent = messageStr.toByteArray()
        val p = DatagramPacket(messageSent,msg_length,local,6670)
        s.send(p)

        val sRec = DatagramSocket(null)
        sRec.reuseAddress = true
        sRec.broadcast = true
        sRec.bind(InetSocketAddress(6670))
        Log.d("testUDP","SoTimeOut:${sRec.soTimeout}")
        sRec.soTimeout = 1500
        var data = "Packet0"
        var udpPacket = DatagramPacket(
            data.toByteArray(),data.length,InetAddress.getByName("0.0.0.0"),6670
        )
        sRec.send(udpPacket)

        data = "Packet1"
        udpPacket = DatagramPacket(
            data.toByteArray(),6670
        )
        sRec.send(udpPacket)

        data = "Packet2"
        udpPacket = DatagramPacket(
            data.toByteArray(),6670
        )
        sRec.send(udpPacket)

        var text: String
        val messageRec = ByteArray(1500)
        val pRec = DatagramPacket(messageRec,messageRec.size)

        var count = 0
        while(count < 3){
            try{
                sRec.receive(pRec)
                text = String(messageRec,pRec.length)
                Log.d("testUDP","message:$text")
            } catch (e: Exception){
                e.printstacktrace()
            }
            count +=1
        }

        s.close()
        sRec.close()
    }

D/testUDP: message:Packet0

D/testUDP: message:Packet1

D/testUDP: message:Packet2

如您所见,套接字对象 sRec 没有收到套接字对象 s 发送的消息,即使它们都绑定到相同的(地址、端口)。有人可以帮我理解我所缺少的。非常感谢您的时间和帮助。

解决方法

服务器和客户端应该在两个不同的线程上,以确保一个不会阻塞另一个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。