Я создал приложение для iOS, на котором размещен UDP-сервер. Мне кажется невозможным заранее узнать IP-адрес сервера. Я использую эту функцию, чтобы получить IP-адрес:
// Получить IP-адреса
void getIPAddresses(std::map<std::string, std::string>& addresses) {
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
// Retrieve the current interfaces - returns 0 on success
int success = getifaddrs(&interfaces);
if (success == 0) {
// Loop through linked list of interfaces
temp_addr = interfaces;
while (temp_addr != NULL) {
if (temp_addr->ifa_addr->sa_family == AF_INET) {
// Check if interface is en0 which is the wifi connection on the iPhone
addresses[temp_addr->ifa_name] = inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr);
}
temp_addr = temp_addr->ifa_next;
}
}
// Free memory
freeifaddrs(interfaces);
}
Как видно, эта функция возвращает количество IP-адресов и без проб и ошибок она не 'Кажется невозможным определить, по какому IP-адресу сервер на самом деле принимает пакеты UDP.
Есть ли какой-нибудь способ, которым я могу сделать это лучше, используя Bonjour? Устройства, которые подключаются к моему серверу UDP, могут это делать, потому что мой iPhone действует как точка доступа Wi-Fi (я заранее сообщаю SSID и пароль устройствам).
РЕДАКТИРОВАТЬ:
Кажется, чтовсякий раз, когда я создаю Wifi Hotpspot, сервер UDP доступен через интерфейс под названием «Bridge100». Так что я знаю, что такое IP-адрес. Как я могу использовать Bonjour, чтобы другие устройства, подключенные к моей айфонской точке доступа Wi-Fi, могли знать IP-адрес моего сервера udp?