2012-04-12 4 views
2

У меня есть две интернет-карты на моей машине, настроенные с двумя отдельными IP-адресами. Оба IP-адреса являются частью одной и той же сети. Правильно ли я говорю, что когда я создаю сокет, который определен для одного из этих IP-адресов?Розетки и несколько IP-адресов

UPDATE:

Вот моя ситуация:

У меня есть аппаратное устройство, расположенное на 192.168.0.10. Он передает через udp (192.168.0.11, 50000) и (192.168.0.12, 50000). Аппаратное устройство выполняет это через два порта: (192.168.0.10, 49000) и (192.168.0.10, 49001).

Я создаю порты (192.168.0.11, 50000) и (192.168.0.12, 50000) через сценарий, чтобы я мог регистрировать и манипулировать связью, затем данные пересылаются на два симулятора, которые способны разговаривать с аппаратное обеспечение.

Таким образом, мой сценарий является «человеком посередине», где я регистрирую и повреждаю данные для тестирования оборудования.

Вот сокет интерфейсы для моего сценария:

IP 1 - Channel 1 

External_socket = (192.168.0.10, 49000) ** Hardware 
External_side_socket = (192.168.0.11, 50000) ** Script 
Simulator_side_socket = (192.168.0.11, 50001) ** Script 
Simulator_socket = (192.168.0.11, 50002) ** Simulator 

IP2 - Channel 2 

External_socket = (192.168.0.10, 49001) ** Hardware 
External_side_socket = (192.168.0.12, 50000) ** Script 
Simulator_side_socket = (192.168.0.12, 50001) ** Script 
Simulator_socket = (192.168.0.12, 60002) ** Simulator 

И это работает, как ожидалось, и правильные данные регистрируются для каждого канала.

Однако, она перестает работать, если я сделать два простых изменения:

1) я изменить файл конфигурации второго симулятора на 50002 из 60002, сохраняя при этом адрес IP-на 192.168.0.12.

2) В моем сценарии я также изменяю 60002 на 50002 для IP2.

Внезапно данные со второго канала поступают на первый симулятор. Как это может быть? .net имеет IPAny, и мне интересно, использует ли этот симулятор каким-то образом и игнорирует ip-адрес в его файле конфигурации. Считаете ли вы, что это может быть проблемой?

Спасибо,

Barry

ответ

0

Я бы сказал, что это правильно-иш. В зависимости от уровня абстракции, который вы хотите использовать в своем заявлении.

При создании сокета он не привязан к IP-адресу. Глядя на статью Википедии о Berkeley socket вы видите, что первый один создать сокет (socket()), указав домен , тип сокета и семьи. Затем сокет привязан (bind()) к адресу, например 10.0.0.1. Затем, в зависимости от того, что вы хотите использовать сокет, вы можете настроить его для прослушивания, принятия или подключения.

Локальный адрес имеет IP-адрес, как и любое другое устройство, то есть 127.0.0.1. Вы создаете сокет и привязываете его к 127.0.0.1. Затем этот сокет работает как любой другой сокет, с которым вы можете общаться.

Вы также можете прочитать статью в Википедии по адресу Network Socket.

0

Вы можете bind использовать значение INADDR_ANY, что означает отсутствие привязки к определенному сетевому интерфейсу, поэтому вы можете работать, игнорируя IP-адрес, на котором работает ваша программа.

Ссылки here и here.