为什么我的Node.js脚本看不到任何在特定端口上发送的UDP数据包?

时间:2015-04-29 10:57:37

标签: javascript node.js sockets networking udp

我有C#应用程序发送特定IP和端口的UDP数据包,它运行良好,因为我有另一个应用程序接收这些包。现在我想发送它们以便我可以在我的网页上显示它 - 我已经读过node.js完全适合这里。

我在windows环境下安装了当前版本的node.js并使用了以下代码:

var PORT            = 19777;
var MULTICAST_GROUP = "224.0.0.251";

var dgram = require("dgram");

var client = dgram.createSocket("udp4");

client.on("message", function(message, rinfo) {
    console.log("received: ",message,rinfo);
});
client.on("listening", function() {
    console.log("listening on ",client.address());

    client.setBroadcast(true);
    client.setTTL(64);
    client.setMulticastTTL(64);
    client.setMulticastLoopback(true);
    client.addMembership(MULTICAST_GROUP);
    client.send(payload, 0, payload.length, PORT, MULTICAST_GROUP, function(err,bytes) {
        console.log("err: "+err+" bytes: "+bytes);
        // client.close();
    });
});
client.on("close", function() {
    console.log("closed");
});
client.on("error", function(err) {
    console.log("error: ",err);
});
client.bind(19777);

现在我开始从我的C#应用​​程序发送以下ip "224.0.0.251"和端口19777的数据包 - 但是,在runnint客户端应用程序后,我遇到以下错误:

C:\Users\user\Desktop>node client.js
error:  { [Error: bind EADDRINUSE] code: 'EADDRINUSE', errno: 'EADDRINUSE', sysc
all: 'bind' }

我做错了什么?并且 - 在解决了这个问题之后 - 我能在控制台中看到所有数据包吗?感谢。

-------------编辑:

根据John的建议,我修改了应用程序,以便只有node.js正在侦听该端口。多亏了这一点,我取得了进步,并在我的控制台的输出上得到了:

C:\Users\user\Desktop>node client.js
listening on  { address: '0.0.0.0', family: 'IPv4', port: 19777 }
C:\Users\user\Desktop\client.js:19
    client.send(payload, 0, payload.length, PORT, MULTICAST_GROUP, function(er
                ^
ReferenceError: payload is not defined
    at Socket.<anonymous> (C:\Users\godyckim\Desktop\client.js:19:17)
    at Socket.emit (events.js:104:17)
    at startListening (dgram.js:139:10)
    at dgram.js:230:7
    at dns.js:85:18
    at process._tickCallback (node.js:355:11)
    at Function.Module.runMain (module.js:503:11)
    at startup (node.js:129:16)
    at node.js:814:3

但仍然没有可见的数据包..好吧,我看到我没有定义有效负载变量...我想要实现的是接收由udp发送的数据包并在节点中显示它。 js console(这对我来说是一个开始),或者进一步传输它以便我可以在浏览器中看到它们。在第二种情况下 - 我现在究竟做错了什么?谢谢!

0 个答案:

没有答案