2014-09-03 2 views
4

Как указать порт источника/локальный порт для исходящего TCP-соединения с помощью node.js? Это необходимо для поддержки определенных правил брандмауэра.Укажите локальный порт для подключения клиента сокета TCP

net.connect({port: PORT, host: HOST}, callback) 

Ожидающий дополнительный параметр «localPort» в вышеуказанном вызове. Но выглядит, что API не обрабатывается, и следующее не работает.

net.connect({port: PORT, host: HOST, localPort: 12345}, callback) 

Использование Java я хотел бы сделать, как показано ниже:

Socket s = new Socket(); 
s.bind(new InetSocketAddress("179.11.123.102", 5000)); 
s.connect(new InetSocketAddress("178.1.2.102", 1234)); 

Что такое эквивалент в Node.js?

+0

Что? Сокет не может использоваться одновременно для прослушивания и подключения. – freakish

+0

Это не я имею в виду, укажите локальный порт для исходящих подключений –

+0

Хорошо. Так что вы пробовали? Это довольно хорошо документировано. – freakish

ответ

5

Согласно отчету об ошибке «net.connect() should accept a localPort option», эта функция была недавно добавлена:

В настоящее время net.connect имеет параметр localAddress, но он должен также иметь локальный_порт ...

Это просто еще не выпустили ... [он] должен быть включен в v0.11.13

он был добавлен в this commit 17 февраля и должны быть доступны в следующем выпуске Node. Если вы не можете ждать, вы можете исправить diff непосредственно в 0.10.31, и он должен работать как есть, потому что C++ Bind function at the time of the 0.10.31 release поддерживает аргумент порта (патч просто увеличивает уровень JavaScript до , используя, что аргумент C++).

+0

Спасибо. Любая рекомендация, если рекомендуется исправить это исправление в последнюю стабильную версию? Также я вижу, что только файлы js меняются. Я считаю, что также должны быть изменения файла C++. Отслеживаются ли эти файлы отдельно? –

+0

@PhaniKumar Не держите меня в силе, если все пойдет не так (': P'), но да, похоже, вы могли бы просто подтолкнуть его к текущему выпуску. Я думаю, что 'self._handle.bind' ссылается на некоторую сетевую функцию C' bind', которая может принимать адрес и порт. Узел ранее использовал вариант только для адреса, но он уже мог принимать аргумент порта (Node просто не использовал этот аргумент). – apsillers

+0

@PhaniKumar Подтверждено: [C++ 'Bind' функция во время выпуска 0.10.31] (https://github.com/joyent/node/blob/7fabdc23d843cb705d2d0739e7bbdaaf50aa3292/src/tcp_wrap.cC# L269-L284) (который используется в этом патче как 'self._handle.bind') поддерживает номер порта в качестве второго аргумента:' int port = args [1] -> Int32Value() ' – apsillers

Смежные вопросы