Машина имеет 2 NICs. Какой будет использоваться при соединении с сокетом?

Я должен признать, что это немного чрезмерное использование .replace(), но работать не с чем:

$mystring= "    S: Title = test S: Title = test2 S: Title = test3 S: Title = test4 
 TE: 2019-01-19T00:00:00Z TE: 2019-01-20T00:00:00Z TE: 2019-01-22T00:00:00Z TE: 2019-01-23T00:00:00Z "


$MyString.trim().replace(" S: Title = ",",").replace("T00:00:00Z TE: ",",").replace("TE: ","").replace("S: Title = ","").replace("T00:00:00Z","").replace(" ","") | convertfrom-csv

Вывод:

test         test2        test3        test4     
----         -----        -----        -----     
2019-01-19   2019-01-20   2019-01-22   2019-01-23

Было бы проще (и более заметным) реализовать эти шаги при создании строки.

7
задан Bogdan Gavril MSFT 3 September 2013 в 14:29
поделиться

3 ответа

Безотносительно языка, который Вы используете, Вы будете в конечном счете пользоваться библиотекой сокетов, разделенной на уровни сверх реализации исходного C сокетов BSD сетевая библиотека. Хотя Вы, возможно, должны изменить некоторые вещи для различных библиотек и языков, следующая информация должна, по крайней мере, быть полезной в предназначении, где посмотреть в документации Вашей библиотеки.

Серверы

Обычно, программа сервера выпускает следующую последовательность вызовов:

  1. socket() возвращает "плавающий" объект сокета.
  2. bind() связывает сокет с конкретным числом закрепленного порта на (обычно) всех сетевых картах (NICs) в машине.
  3. listen() заставляет сокет идти "живой".
  4. accept() блоки до соединения от клиентской машины сделаны.

Точка, где можно решить, к которому NIC использовать находится в вызове bind(), который ожидает структуру данных, содержащую IP-адрес и номер порта. Обычная стратегия состоит в том, чтобы передать специальное значение INADDR_ANY для IP-адреса, указывая, что соединения должны использовать любого и весь NICs в машине, однако IP конкретного NIC может быть указан вместо этого для получения соединений только через тот NIC.

Клиенты

Обычно, клиентская программа выпускает следующую последовательность вызовов:

  1. socket() возвращает "плавающий" объект сокета.
  2. connect() связывает сокет со случайным образом выбранным портом на случайным образом выбранном NIC и пытается соединиться с удаленным host:port комбинация указана.

Таким образом, как клиент может выбрать что NIC использовать? Клиент может также принять решение звонить bind() если это так требует, после socket() и прежде connect(). Обычно это не сделано просто потому что connect() автоматически свяжет несвязанный сокет способом, который включает доступ через любой NIC (который обычно является желаемым поведением), но эта автопривязка может быть выключена путем вызова bind() явно. В этом случае необходимо указать 0, чтобы номер порта имел ОС, выбирают число случайного порта для Вас.

После того как связь была установлена, можно звонить getsockname() получить информацию о сокете, такой как, с каким IP это связывается (т.е. который NIC это передает через) и какой номер порта был присвоен (в случае клиентской программы).

13
ответ дан 6 December 2019 в 12:56
поделиться

a. После того, как соединение устанавливается, большинство API сокета имеет призыв к чему-то как "getLocalAddress", который скажет Вам интерфейс, что ОС выбрала для Вас.

b. Точно так же после того, как сокет создается, но прежде чем соединение устанавливается, большинство API сокета имеет вызов для привязки сокета с локальным адресом и/или портом.

2
ответ дан 6 December 2019 в 12:56
поделиться

Вы найдете эти ссылки полезными, так как вопрос не обеспечивает язык, вот для наиболее распространенных.

Программирование сокета в C

Программирование сокета в C#

Программирование сокета в Java

Программирование сокета в Python

Так, используйте любую из этих ссылок и перейдите к languge, который Вы используете. Найдите функцию для получения Вашего адреса узла или IP-адреса и используйте Связывать метод для appropriet языка. Это вынудит приложение связать с тем интерфейсом.

1
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: