后台给了一段UDP的代码,在Windows上面运行都可以收到 但是在安卓上socket?receive一直卡在这里
try { // 先获取本机IP地址 // val ipAddress = NetworkUtils.getIPAddress(context) // if (ipAddress.isNullOrEmpty()) { // func.invoke("", false) // return@withContext // } // val bindAddr = InetAddress.getByName(ipAddress) // socket = DatagramSocket(dataGramPort,bindAddr) !!!不要使用这种方式来初始化!!! // 打开广播 socket = DatagramSocket(dataGramPort) //请直接设置一个端口即可 socket?.setBroadcast(true) // 准备广播地址和数据包 val broadcastAddress = InetAddress.getByName("255.255.255.255") // 或指定子网的广播地址 val buffer = discoveryMsg.toByteArray() val packet = DatagramPacket(buffer, buffer.size, broadcastAddress, targetPort) // 发送广播消息 socket?.send(packet) // 超时时间 socket?.soTimeout = 5000 // 等待设备响应 超时时间 val responseBuffer = ByteArray(1024) val responsePacket = DatagramPacket(responseBuffer, responseBuffer.size) while (true) { try { Log.i(TAG, "正在搜索设备...") socket?.receive(responsePacket) val response = String(responsePacket.data, 0, responsePacket.length) val hostAddress = responsePacket.address.hostAddress Log.e(TAG, "发现主机:${hostAddress}") Log.e(TAG, "相应数据:${response}") } catch (e: Exception) { Log.e(TAG, "搜索设备错误:${e.message}") break } } } catch (e: Exception) { e.printStackTrace() Log.e(TAG, "搜索设备错误:${e.message}") func.invoke("发生异常${e.message}", false) }