JavaScript net.connect() - 显式设置本地端点 IP 地址



我找不到在net.connect()函数中设置local endpoint字段的方法。我需要将local endpoint显式设置为特定的 IP 地址。

我正在使用node-ads库将节点进程连接到PLC设备。

在我的示例中:

ads.tcpClient = net.connect(
ads.options.port,
ads.options.host,
function () {
ads.connected = true
cb.apply(ads.adsClient)
}
)

connect()函数不提供参数。返回的socket对象似乎也没有终结点的字段。我做错了什么?

原因是我正在连接到 Beckhoff PLC,如果同一台计算机上已经存在另一个连接,则连接需要不同的主机 IP 地址。问题在这里提到。

我知道在 Beckhoff-ADS C# 实现中是可能的,因为这段代码有效:

var socket = new AmsSocket(targetip, amsport)
{
LocalEndPoint = new IPEndPoint(IPAddress.Parse(sourceip), 0)
};

UPDATE通过执行以下操作解决了该问题:

  • 更改ads.js文件以显式设置源 IP 地址
  • 最好不要在node_modules中执行此操作,而只是将ads.js文件复制到不会被覆盖的地方

位于ads.js

var connect = function (cb) {
var ads = this
ads.tcpClient = net.connect({
port: ads.options.port,
host: ads.options.host,
localAddress: ads.options.sourceIp,   // the part you have to add
},

在ADS 连接的options中传递sourceIp

public options = {
host: "192.168.100.1",
amsNetIdTarget: "192.168.100.1.1.1",
amsNetIdSource: "192.168.100.105.1.1",
sourceIp: "192.168.100.105",
};

连接到您的 PLC:

const client = ads.connect(this.options, () => {
console.log("Trying to connect.");
client.readDeviceInfo((err, result) => {
if (err) {
console.log("Error: " + err);
}
console.log("Connection result: " + JSON.stringify(result));
client.end();
});
});

足够简单,但不幸的是在节点 ADS 中不受支持。

最新更新