2014-01-13 47 views
0

嗨,我一直在問,使聽一些端口服務器陣列的陣列,這裏的問題是,當我使用:節點JS,模塊網,服務器

「serviceSocket.connect(parseInt函數(80 ), 「elpais.es」,

我真正需要的是使用ADRESS和remotePorts陣列 這樣的:

「serviceSocket.connect(遠程端口[I],ADRESS [1])

但我無法將該信息傳遞給serviceSocket。 此外,當我嘗試獲取已被server.address()觸發的端口(例如,我通過8002連接)時,我一直得到的回報是8008.

我怎樣才能得到正確的端口,還是傳遞信息?

var ports = [8001,8002,8003,8004,8005,8006,8007,8008]; 
var adress = ["www.cnc.uji.es","en.wikipedia.org","random.random2.es","ftp.rediris.es", "elpais.es" ,"","",""] 
var remotePort = [80,80,443,21,80,"","",""] 

for (i=0 ;i<ports.length; i++){ 

    var server = net.createServer(function(socket){ 

     socket.on('data', function(data){ 
console.log(server.address()); 
      var serviceSocket = new net.Socket(); 
    serviceSocket.connect(parseInt(80),"elpais.es", function(){ 
serviceSocket.write(data);}); 
    serviceSocket.on('data',function(data){console.log(server.address()); 
socket.write(data);}); 
     }); 
     }).listen(ports[i]); 
} 
console.log('TCP server accepting connection on port ' + ports) 
+0

可能重複[JavaScript閉包與匿名函數](http://stackoverflow.com/questions/12930272/javascript-closures-vs-anonymous-functions) – Louis

回答

0

你的代碼異步運行,當回調函數調用我,for循環的已完成所以這就是爲什麼你總是得到數組的最後一個元素。

嘗試這樣的事情

var net = require('http'); 
var ports = [8001,8002,8003,8004,8005,8006,8007,8008]; 
var adress = ["www.cnc.uji.es","en.wikipedia.org","random.random2.es","ftp.rediris.es",  "elpais.es" ,"","",""]; 
var remotePort = [80,80,443,21,80,"","",""]; 

for (i=0 ;i<ports.length; i++){ 
makeServer(i); 
} 
console.log('TCP server accepting connection on port ' + ports); 

function makeServer(i){ 
    var server = net.createServer(function(socket){ 
     socket.on('data', function(data){ 
console.log(server.address()); 
     var serviceSocket = new net.Socket(); 
serviceSocket.connect(parseInt(80),"elpais.es", function(){ 
serviceSocket.write(data);}); 
    serviceSocket.on('data',function(data){console.log(server.address()); 
socket.write(data);}); 
     }); 
     }).listen(ports[i]); 

}; 

代碼沒有進行測試。