我有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(这对我来说是一个开始),或者进一步传输它以便我可以在浏览器中看到它们。在第二种情况下 - 我现在究竟做错了什么?谢谢!