AeroToss: исправлен hostAddress (127.0.0.1 → 192.168.1.107)

- handleDiscoveryRequest теперь возвращает реальный IP через findNetworkAddress()
- findNetworkAddress() ищет приватный IPv4 адрес на не-loopback интерфейсе
- IP адрес теперь корректно отображается на обоих устройствах
This commit is contained in:
2026-08-19 23:15:10 +03:00
parent 2ba023b867
commit 87b892caec
@@ -113,7 +113,7 @@ class TcpDiscovery : DiscoveryManager {
deviceName = deviceName, deviceName = deviceName,
deviceType = "desktop", deviceType = "desktop",
servicePort = servicePort, servicePort = servicePort,
hostAddress = sock.localAddress.hostAddress hostAddress = findNetworkAddress()
) )
output.write(json.encodeToString(response)) output.write(json.encodeToString(response))
output.newLine() output.newLine()
@@ -123,6 +123,24 @@ class TcpDiscovery : DiscoveryManager {
} catch (_: Exception) {} } catch (_: Exception) {}
} }
private fun findNetworkAddress(): String {
return try {
NetworkInterface.getNetworkInterfaces()?.toList()
?.filter { it.isUp && !it.isLoopback }
?.flatMap { it.inetAddresses.toList() }
?.filterIsInstance<java.net.Inet4Address>()
?.firstOrNull { isPrivate(it) }
?.hostAddress ?: "127.0.0.1"
} catch (_: Exception) { "127.0.0.1" }
}
private fun isPrivate(addr: java.net.InetAddress): Boolean {
val bytes = addr.address
return (bytes[0].toInt() and 0xFF == 192 && bytes[1].toInt() and 0xFF == 168) ||
(bytes[0].toInt() and 0xFF == 10) ||
(bytes[0].toInt() and 0xFF == 172 && (bytes[1].toInt() and 0xFF in 16..31))
}
private fun sendBroadcast(socket: DatagramSocket, servicePort: Int) { private fun sendBroadcast(socket: DatagramSocket, servicePort: Int) {
try { try {
val message = "AEROTOSS:$TCP_PORT:$servicePort:$deviceId:$deviceName" val message = "AEROTOSS:$TCP_PORT:$servicePort:$deviceId:$deviceName"