JavaScript net.connect() - 显式设置本地端点 IP 地址
JavaScript net.connect() - explicitly set local endpoint IP address
我找不到在 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 地址。问题是mentend here.
我知道在 Beckhoff-ADS C# 实现中这是可能的,因为这段代码有效:
var socket = new AmsSocket(targetip, amsport)
{
LocalEndPoint = new IPEndPoint(IPAddress.Parse(sourceip), 0)
};
更新 通过执行以下操作解决了问题:
- 更改您的
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
},
在您的 options
中为 ADS 连接传递 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();
});
});
足够简单,但遗憾的是在 node-ADS 中不受支持。
我找不到在 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 地址。问题是mentend here.
我知道在 Beckhoff-ADS C# 实现中这是可能的,因为这段代码有效:
var socket = new AmsSocket(targetip, amsport)
{
LocalEndPoint = new IPEndPoint(IPAddress.Parse(sourceip), 0)
};
更新 通过执行以下操作解决了问题:
- 更改您的
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
},
在您的 options
中为 ADS 连接传递 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();
});
});
足够简单,但遗憾的是在 node-ADS 中不受支持。