113 字
1 分钟
在Kotlin中不使用外部库的情况下解析SRV记录

直接贴代码

private const val MC_SRV_PREFIX = "_minecraft._tcp"
private val env = Hashtable<String, String>().also {
        t["java.naming.factory.initial"] = "com.sun.jndi.dns.DnsContextFactory"
}
private val dirContext = InitialDirContext(env)

fun srv(host: String): MutableList<String> {
    val srvDomain = "$MC_SRV_PREFIX.$host"
    val attrs = dirContext.getAttributes(srvDomain, arrayOf("SRV"))
    val srvRecords = mutableListOf<String>()
    val srvAttr = attrs.get("SRV")
    if (srvAttr != null) {
        for (i in 0 until srvAttr.size()) {
            val srvRecord = srvAttr.get(i) as String
            srvRecords.add(srvRecord)
        }
    
    return srvRecords
}
fun main() {
    val srvRecords = srv(host)
    srvRecords.forEach {
        val srv = it.split(" ")
        val priority = srv.first().toInt()
        val weight = srv[1].toInt()
        val port = srv[2].toInt()
        val host = srv.last()
        // 在这里处理所有的srv记录
    }
}