Изучаю программирование сокетов. Возник простой вопрос. При создании клиента, обращающегося к серверу, вызывается функция Bind, в которой должен быть указан локальный IP-адрес. Туда я подставляю локальный адрес своей машины 192.168.0.2 и все работает. Но у меня стоит задача, чтобы как-то автоматически определять это адрес. Потому что на других машинах он естественно может быть каким угодно. Как это можно сделать?
Вроде я знаю как получить таблицу адресов на машине, но как выбрать оттуда нужный? На машине может быть несколько локальных адресов (VMWare, еще какая-нибудь фигня).
Использование INADDR_ANY естественно приводит к неработоспособности клиента.
A>При создании клиента, обращающегося к серверу, вызывается функция Bind, в которой должен быть указан локальный IP-адрес. Туда я подставляю локальный адрес своей машины 192.168.0.2 и все работает. Но у меня стоит задача, чтобы как-то автоматически определять это адрес. Потому что на других машинах он естественно может быть каким угодно. Как это можно сделать?
Для клиентского сокета не нужно вызывать bind. Это можно делать, но это требуется в очень редких ситуациях.
Клиентский сокет может сразу делать connect и подключаться к удалённому серверу. И ОС сама назначит ему подходящий локальный адрес (если интересно какой, то можно его потом узнать через вызов getsockname).
A>Изучаю программирование сокетов. Возник простой вопрос. При создании клиента, обращающегося к серверу, вызывается функция Bind, в которой должен быть указан локальный IP-адрес. Туда я подставляю локальный адрес своей машины 192.168.0.2 и все работает. Но у меня стоит задача, чтобы как-то автоматически определять это адрес. Потому что на других машинах он естественно может быть каким угодно. Как это можно сделать? A>Вроде я знаю как получить таблицу адресов на машине, но как выбрать оттуда нужный? На машине может быть несколько локальных адресов (VMWare, еще какая-нибудь фигня).
С какой целью ты это делаешь?
A>Использование INADDR_ANY естественно приводит к неработоспособности клиента.