2014-09-03 136 views
4

如何指定使用Node.js的出站TCP連接的源端口/本地端口本地端口?這是支持某些防火牆規則所必需的。指定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 2014-09-03 12:11:19

+0

這不是我的意思,指定出站連接的本地端口 – 2014-09-03 12:16:02

+0

好的。那麼你有什麼嘗試?這是非常有據可查的。 – freakish 2014-09-03 12:20:56

回答

5

根據錯誤報告 「net.connect() should accept a localPort option」,是最近添加的功能:

目前,net.connect有一個參數將localAddress,但它也應該有一個將localPort ...

這是隻是還沒有發佈... [它]應該包含在v0.11.13中

它在this commit中於2月17日添加,並應在下一個版本的Node中可用。如果你不能等待,你可以修補差異直接進入0.10.31,它應該工作的,是因爲C++ Bind function at the time of the 0.10.31 release支持端口參數(補丁只是增強了JavaScript的層使用是C++的說法)。

+0

謝謝。如果建議將此修補程序修補到最新的穩定版本中,有哪些建議?另外我看到只有js文件更改。我相信也應該有C++文件的變化。這些文件是分開跟蹤的嗎? – 2014-09-03 14:29:04

+0

@PhaniKumar不要抱我承擔責任,如果出了問題(':P'),但是,是的,它看起來像你可以推說成當前版本就好了。我認爲'self._handle.bind'指的是一些C網絡功能'bind',它可以帶一個地址和一個端口。節點先前使用了僅地址變體,但它也可能已經採用端口參數(節點根本不使用該參數)。 – apsillers 2014-09-03 14:40:06

+0

@PhaniKumar證實:[C++'在0.10.31釋放的時間Bind'功能](https://github.com/joyent/node/blob/7fabdc23d843cb705d2d0739e7bbdaaf50aa3292/src/tcp_wrap。cc#L269-L284)(在該補丁中用作'self._handle.bind')支持將端口號作爲第二個參數:'int port = args [1] - > Int32Value()' – apsillers 2014-09-03 14:45:42