Nodejs服务器与两个网络接口卡通信

时间:2014-08-29 14:03:33

标签: node.js

nodejs服务器是否可以让它在一个网络接口上接收消息,然后在另一个网络接口上输出HTTP请求?

场景: 我在本地网络上有一台设备,我希望服务器能够从中接收数据并将其格式化为更新第三方Web应用程序的请求。 我已经确认我正确接收本地消息,并且我已经确认HTTP请求的格式应该使用fiddler,但在这两个部分之间的某个地方我遇到了问题。 我此刻收到“socket hang up”错误。

提前致谢

修改 下面是我的服务器代码。我已为传入和传出消息指定了IP地址,但仍然出现套接字挂起错误。任何人都可以发现可能导致此问题的任何其他问题吗?
我想知道我是否需要为安全连接做些不同的事情? (这是一个https网址)

var url = require("url");
var http = require('http');


http.createServer(function (request,response) {
    var theUrl = url.parse(request.url);
    console.log(theUrl);
    var timeline = {   // Data to be sent to external web service
        channel: "#test",
        username: "Slash",
        icon_emoji: ":smirk_cat:",
        text: "Timeline Started: " + theUrl.path
    };
    var data = JSON.stringify(timeline)

    var options = {
        host: "example.com",
        path: "/path/to/web/service",
        localAddress: '172.20.1.53', // IP address of outgoing NIC
        method: 'POST',
        port: "443",
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(data),
        }
    };

    var req = http.request(options, function(res){
        res.on('data', function(resp) {
            console.log(resp)
        });
    });
    req.on('error', function(err) {
        console.log("ERROR: " + err.message);
    });
    req.write(data);
    console.log(req);
    req.end();
}).listen(801, '172.30.2.92'); // IP address of incoming NIC 

2 个答案:

答案 0 :(得分:2)

我设法解决了这个问题,我只需要将var req = http.request更改为var req = https.request

答案 1 :(得分:0)

是的,您可以通过分配的IP地址指定接口。

对于服务器,您可以在listen()中指定它,如下所示:

server.listen(8000, '192.168.100.14');

对于传出的HTTP请求,您可以将其指定为localAddress,如下所示:

http.request({
  localAddress: '192.168.5.27',
  // ...
}, ...);