Определение локального IP-адреса в приложении P2P - PullRequest
2 голосов
/ 11 января 2011

Я разрабатываю P2P-приложение, в котором одноранговые устройства общаются с сервером, чтобы сообщить его частный и публичный IP-адреса.Приложение использует UDP для связи.

Чтобы получить частный IP-адрес, клиент использует gethostbyname и привязывает его к этому IP-адресу.Проблема в том, что в системе имеется несколько сетевых карт.Проблема в том, что один из сетевых адаптеров не подключен к Интернету.Поэтому, чтобы избежать этого, я использую INADDR_ANY и связываю его.

Теперь мне нужно получить свой локальный IP-адрес, чтобы сообщить серверу.Есть ли API, который сообщит мне, какой IP-адрес сетевой карты активен?

1 Ответ

1 голос
/ 11 января 2011

Вам нужно привязать к явному IP-адресу, а не INADDR_ANY, поскольку привязка к INADDR_ANY будет означать, что вызов getsockname() в сокете для получения локального адреса просто вернет INADDR_ANY.

Итак, вам нужно перебрать доступные конечные точки (используя getaddrinfo()) и создать сокет для каждой из них.Затем они дадут вам правильный адрес, если вы позвоните им getsockname() позже.

...