C Программирование с использованием определенного IP-адреса хоста для подключения к серверу - PullRequest
2 голосов
/ 16 сентября 2011

Я смотрю на машину с несколькими IP-адресами (например, Ethernet и беспроводной), и мне нужно, чтобы мой клиент подключился к серверу, используя определенный IP-адрес клиента. Я могу легко выполнить это в Java (выполнив Socket () с 4 аргументами), но единственная ссылка на использование определенного IP-адреса хоста, которую я вижу, - это использование bind (), но, насколько я знаю, используется только для серверов.

Синопсис: Клиент имеет 2 IP-адреса (Ethernet и беспроводной), пытающихся подключиться к серверу ... но использующих определенный IP-адрес (не нужно беспокоиться о "поиске" IP-адресов, поскольку они будут в файле конфигурации или DEFINE

Не только ответ для Windows, но и программирование на C, которое переносимо (обычно я использую Mac OSX / Linux, но также и Windows)

Ответы [ 3 ]

1 голос
/ 16 сентября 2011

Ваша ссылка верна. Если вы используете bind () , то этот адрес будет использоваться для привязки клиентского сокета к интерфейсу, который вы хотите использовать. bind () используется не только для серверных сокетов.

1 голос
/ 16 сентября 2011

Я никогда не делал этого раньше, но я думаю, что вы можете привязать сокет к IP-адресу и затем использовать соединение с этим сокетом. Соответствующий раздел отсюда http://pubs.opengroup.org/onlinepubs/009695399/functions/connect.html гласит:

Если сокет еще не был привязан к локальному адресу, connect () должен связать его с адресом, который, если только семейство адресов сокета является AF_UNIX, это неиспользуемый локальный адрес.

Это означает, что связывание может быть использовано до подключения.

0 голосов
/ 16 сентября 2011

https://beej.us/guide/bgnet/html/multi/syscalls.html#bind

Используя флаг AI_PASSIVE, я говорю программе связываться с IP хоста, на котором он работает. Если вы хотите привязать к определенному локальный IP-адрес, сбросьте AI_PASSIVE и введите IP-адрес для первый аргумент для getaddrinfo ().

...