Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的Node.js脚本看不到在特定端口上发送的任何UDP数据包?_Javascript_Node.js_Sockets_Networking_Udp - Fatal编程技术网

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

Javascript 为什么我的Node.js脚本看不到在特定端口上发送的任何UDP数据包?,javascript,node.js,sockets,networking,udp,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 =

我有一个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上发送数据包-但是,在运行客户端应用程序后,我出现以下错误:

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发送的数据包,并将其显示在node.js控制台中,这对我来说是一个开始,或者进一步传输数据包,以便我可以在浏览器中看到它们。在第二种情况下,我到底做错了什么?谢谢

这通常意味着您试图将node.js和c应用程序绑定到同一ip/端口。。请记住,只有接收端必须侦听特定端口才能将数据包发送到该端口。。它们来自哪个端口并不重要。谢谢@John,我在上面的帖子中添加了一个编辑部分,你能看一下吗?你试图发送一个应该是缓冲区的负载,但是没有。。您可以使用var payload=newbuffer“出现一条野生消息”创建一个缓冲区;谢谢@John,这就成功了,现在我可以在控制台输出中看到很多数据包。我非常高兴,很高兴你给了我这个暗示:。现在我想处理这些数据,但我不知道它们在我的案例中具体存储在哪里。它们是否存储在某种表格中?还是列表?在内存中。。您可以使用fs轻松地将每个传入数据包写入一个文件。writeFile->但这实际上超出了这个问题的范围