我在Azure上创建了一个虚拟机,并定义了一个TCP端点。然后,我创建了一个Node.js TCP服务器,如下所示:
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),但这也没有什么区别。请有人给我一些有助于解决此问题的想法和/或链接。
答案 0 :(得分:1)
不知何故,将主机声明为127.0.0.1导致了问题。我删除了它,让服务器只监听端口,即监听(端口)。执行此操作后,我能够检测到端口已打开,然后远程计算机上的程序能够与虚拟机进行双向通信。
答案 1 :(得分:0)
当您将HTTP服务器绑定到地址127.0.0.1时,您只在local loopback interface上侦听传入请求。这意味着来自其他设备的任何请求即使在同一网络上也无法访问您的服务。
省略IP地址将使服务侦听主机上的任何可用IP地址 - 请参阅Node.js docs。请注意,某些托管服务提供商会要求您的应用程序监听特定的IP地址,以便能够提供请求(即Openshift)。