gpt4 book ai didi

javascript - UDP多播nodejs

转载 作者:行者123 更新时间:2023-11-29 21:38:56 25 4
gpt4 key购买 nike

我正在尝试创建一个基于 UDP 多广播的聊天程序,其想法是本地网络上的任何人都可以弹出并开始键入和发送消息。

我认为每个客户端都需要两个套接字,一个用于发送消息,一个用于接收消息。

最简单的,这就是我现在拥有的:

"using strict";

const multicast_addr = "224.1.1.1",
bin_addr = "0.0.0.0",
port = 6811;

var udp = require("dgram");

var listener = udp.createSocket("udp4"),
sender = udp.createSocket("udp4");

listener.bind(port, multicast_addr, function(){
listener.addMembership(multicast_addr);
listener.setBroadcast(true);
});

listener.on("message", function (b, other) {
console.log(b.toString().trim());
});

process.stdin.on("data", function (data){
sender.send(data, 0, data.length, port, multicast_addr);
});

(不用管回声,那是将构建在其上的应用程序逻辑)

这会将消息回显给运行代码的人,但我也在同一时间在同一台机器 OS X 上的 Linux VM 上运行了它,但根本没有看到传递的消息。

不知道是不是这样

1) 我的代码不正确

2) 虚拟机与其主机具有相同的网络?

3) 代码正确,但我的家用路由器阻止了多路广播数据包?

最佳答案

啊,我发现了为地址重用端口的巧妙技巧。

"using strict";

const multicast_addr = "224.1.1.1",
bin_addr = "0.0.0.0",
port = 6811;

var udp = require("dgram");

var listener = udp.createSocket({type:"udp4", reuseAddr:true}),
sender = udp.createSocket({type:"udp4", reuseAddr:true});

listener.bind(port, multicast_addr, function(){
listener.addMembership(multicast_addr);
listener.setBroadcast(true);
});

listener.on("message", function (b, other) {
console.log(b.toString().trim());
});

process.stdin.on("data", function (data){
sender.send(data, 0, data.length, port, multicast_addr);
});

致力于让 OS X 通过本地网络与非 VM Ubuntu 对话。

关于javascript - UDP多播nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33861805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com