Использование функции Bind
От: ahaos  
Дата: 04.03.21 02:43
Оценка:
Изучаю программирование сокетов. Возник простой вопрос. При создании клиента, обращающегося к серверу, вызывается функция Bind, в которой должен быть указан локальный IP-адрес. Туда я подставляю локальный адрес своей машины 192.168.0.2 и все работает. Но у меня стоит задача, чтобы как-то автоматически определять это адрес. Потому что на других машинах он естественно может быть каким угодно. Как это можно сделать?
Вроде я знаю как получить таблицу адресов на машине, но как выбрать оттуда нужный? На машине может быть несколько локальных адресов (VMWare, еще какая-нибудь фигня).

Использование INADDR_ANY естественно приводит к неработоспособности клиента.
Re: Использование функции Bind
От: watchmaker  
Дата: 04.03.21 03:10
Оценка: 4 (1) +1
Здравствуйте, ahaos, Вы писали:


A>При создании клиента, обращающегося к серверу, вызывается функция Bind, в которой должен быть указан локальный IP-адрес. Туда я подставляю локальный адрес своей машины 192.168.0.2 и все работает. Но у меня стоит задача, чтобы как-то автоматически определять это адрес. Потому что на других машинах он естественно может быть каким угодно. Как это можно сделать?


Для клиентского сокета не нужно вызывать bind. Это можно делать, но это требуется в очень редких ситуациях.

Клиентский сокет может сразу делать connect и подключаться к удалённому серверу. И ОС сама назначит ему подходящий локальный адрес (если интересно какой, то можно его потом узнать через вызов getsockname).
Re: Использование функции Bind
От: Pzz Россия https://github.com/alexpevzner
Дата: 04.03.21 07:56
Оценка:
Здравствуйте, ahaos, Вы писали:


A>Изучаю программирование сокетов. Возник простой вопрос. При создании клиента, обращающегося к серверу, вызывается функция Bind, в которой должен быть указан локальный IP-адрес. Туда я подставляю локальный адрес своей машины 192.168.0.2 и все работает. Но у меня стоит задача, чтобы как-то автоматически определять это адрес. Потому что на других машинах он естественно может быть каким угодно. Как это можно сделать?

A>Вроде я знаю как получить таблицу адресов на машине, но как выбрать оттуда нужный? На машине может быть несколько локальных адресов (VMWare, еще какая-нибудь фигня).

С какой целью ты это делаешь?

A>Использование INADDR_ANY естественно приводит к неработоспособности клиента.


По какой причине?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.