后台给了一段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)
}