2015-04-27 98 views
3

我在Azure上創建了一個虛擬機並定義了一個TCP端點。然後我創建了一個Node.js的TCP服務器,如下所示:連接到Azure虛擬機上的Node.js服務器

var net = require('net'); 
var host = '127.0.0.1'; 
var port = 8000; 
var times = 1; 

net.createServer(function (socket) { 
console.log('CONNECTED: ' + socket.remoteAddress + ':' + socket.remotePort); 

socket.on('data', function (msg) { 
    console.log("Message received is: " + msg); 
    if (times == 1) 
     socket.write("Server says HI"); 
    times++; 
    executeStatement(); 
}); 

socket.on('close', function (data) { 
    console.log('CLOSED: ' + socket.remoteAddress + ' ' + socket.remotePort); 
}); 
}).listen(port, host); 

console.log('System waiting at http://localhost:8000'); 

我能夠連接到服務器,同時在同一臺主機上,從而在不同的端口兩個應用程序在同一臺機器上可以進行雙向通信。當我嘗試通過公共IP地址和端口號連接到虛擬機時,它失敗。我嘗試在虛擬機上爲私有端口(8000)添加入站防火牆規則,但這也沒有什麼區別。請,有人可以給我一些想法和/或鏈接來幫助解決這個問題。

+3

您是否創建了端點,將某個公共端口(例如8000)映射到內部端口8000? –

+0

嗨大衛。是的,我做到了。我設法解決了這個問題。剛纔發佈答案。 – Vinu

回答

0

當您將HTTP服務器綁定到地址127.0.0.1時,您只在local loopback interface上偵聽傳入請求。這意味着即使在同一網絡上,來自其他設備的任何請求也無法獲得您的服務。

省略IP地址將導致服務偵聽主機上任何可用的IP地址 - 請參閱Node.js docs。請注意,某些託管服務提供商會要求您的應用程序監聽特定的IP地址以便能夠服務請求(即Openshift)。

1

不知怎的,陳述主機爲127.0.0.1導致了這個問題。我刪除了它,並讓服務器只在端口上偵聽,即偵聽(端口)。這樣做後,我能夠檢測到端口已打開,然後我的遠程計算機上的程序能夠與虛擬機雙向通信。

相關問題