使用Node.js和OSC.js在局域网内的计算机之间发送OSC

有没有人创build了一个使用Node.js在局域网内的计算机之间发送OSC的工作设置? 理想情况下,使用Colin Clark的osc.js包?

我有我认为应该是一个非常简单的例子,除了它不工作 – 我得到一个EADDRNOTAVAIL错误,这意味着远程地址不可用。 但是,我可以成功地ping其他笔记本电脑。

这里是代码和错误,供参考:

发送代码(笔记本电脑号码为192.168.0.5):

 var osc = require("osc"); var udp = new osc.UDPPort({ localAddress: "127.0.0.1", // shouldn't matter here localPort: 5000, // not receiving, but here's a port anyway remoteAddress: "192.168.0.7", // the other laptop remotePort: 9999 // the port to send to }); udp.open(); udp.on("ready", function () { console.log("ready"); setInterval(function () { udp.send({ address: "/sending/every/second", args: [1, 2, 3] }) }, 1000); }); 

接收代码(在笔记本电脑上的192.168.0.7):

 var osc = require("osc"); var udp = new osc.UDPPort({ localAddress: "192.168.0.7", localPort: 9999 }); udp.open(); udp.on("ready", function () { console.log("receiver is ready"); }); udp.on("message", function(message, timetag, info) { console.log(message); }); 

这是我运行发送代码时得到的错误:

 ready events.js:141 throw er; // Unhandled 'error' event ^ Error: send EADDRNOTAVAIL 192.168.0.7:9999 at Object.exports._errnoException (util.js:907:11) at exports._exceptionWithHostPort (util.js:930:20) at SendWrap.afterSend [as oncomplete] (dgram.js:345:11) 

问题是用于发送OSC消息的localAddresslocalAddress绑定到回送地址,该地址仅限于本地计算机内的连接。 因此,您的发件人无法find您的收件人。

解决scheme是将发件人的localAddress绑定到适当的networking接口。 如果您的192.168.0.5 IP地址是稳定的,当您将笔记本电脑连接到另一个networking时(例如,对于演出或画廊安装),您无需担心更改,那么您可以使用它。 否则,您可能需要使用mDNS名称(“foo.local”)或“所有接口”地址(0.0.0.0)。

当我在我的networking上尝试时,对“发件人代码”的这种更改适用于我:

 var osc = require("osc"); var udp = new osc.UDPPort({ localAddress: "0.0.0.0", // Totally does matter here :) localPort: 5000, remoteAddress: "192.168.0.7", // the other laptop remotePort: 9999 // the port to send to }); udp.open(); udp.on("ready", function () { console.log("ready"); setInterval(function () { udp.send({ address: "/sending/every/second", args: [1, 2, 3] }) }, 1000); }); 

顺便提一下,osc.js的行为与常规的Node.js UDP套接字不同,因为如果本地地址被省略,节点将默认为0.0.0.0。 然而,一个osc.UDPPort将总是绑定到127.0.0.1,如果localAddress被省略(这在我最初实现osc.js的时候似乎比较安全一些,但是我可以看到它是如何混淆的)。

这个问题也在osc.js问题跟踪器上讨论 ,我将更新文档以防止在这里遇到的那种混淆。 祝你的项目好运!

Interesting Posts