1-й, вы должны иметь возможность обрабатывать случай во время выполнения. Я очень настоятельно рекомендую против различных сборок .. Например: попробуйте внешнюю, если не удается внутреннюю.
Между тем немного эвристики:
Внутренний IP подразумевает, что сеть одинакова. Таким образом, вы можете проверить это, если это то же самое, попробуйте внутренний адрес 1-й, в противном случае внешний имеет приоритет.
Позже сохраните сопоставление локального IP-адреса с успешно подключенным и найдите его, чтобы изменить приоритет.
Само разрешение может быть получено путем запроса корневого '/' сервера с таймаутом (вы можете использовать 2 разных потока для одновременного выполнения задачи, если вам так хочется).
Кроме того, если у вас есть доступ к маршрутизатору / брандмауэру, его можно распознать по внешним адресам и правильно обработать его. Таким образом, вы можете получить внешний адрес, который работает правильно.