问题标签 [multicastsocket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
390 浏览

windows-8 - 无法捕获 Windows 8 的 IPv6 多播流量

以下是我编写的用于捕获来自多播地址 ff02::1 和端口 9154 的 IPv6 多播数据的函数。
此代码在 Windows Vista 和 Windows 7 上运行良好。但我无法为 Windows 8 捕获相同的流量(没有winsock函数返回 Win8 的错误)。

使用netstat我能够验证我的应用程序是否正在使用此端口。
任何人都可以帮忙吗?

0 投票
3 回答
2263 浏览

java - 地址 aeardy in use 异常(Multicast Socket)

我试图为服务编写服务器和客户端,这将告诉当前时间。我的代码:

服务器

客户

启动服务器然后启动客户端时,出现以下错误:

请帮忙,谢谢

编辑: 我更改了客户端端口,现在出现异常:

现在做什么?

0 投票
1 回答
1512 浏览

node.js - NodeJS v.0.10.X 不向后兼容 v0.8.X 用于多播

NodeJS v.0.10.X 不向后兼容 v0.8.X 的多播。

bind似乎已经从同步变为异步。

我目前正在用一个可怕的软糖解决这个问题:

https://github.com/chrisdew/multicast-eventemitter/blob/master/lib/multicast-eventemitter.js#L87

我使用 API 的方式是否有错误,或者这里的向后兼容性是否存在问题?

如果我将 v0.10.X 代码与 NodeJS v0.8.XI 一起使用,则不会收到任何消息(我假设此处对“绑定”的调用是同步的,并且不调用提供的函数。

如果我将 v0.8.X 代码与 NodeJS v0.10.XI 一起使用,则会出现错误:

任何人都可以找到去除这种可怕软糖的方法吗?

0 投票
1 回答
2729 浏览

java - 在java中多播消息时出错

我需要跨连接的客户端多播消息,但遇到问题。我为此链接尝试了以下代码段:

我遇到了一个例外:

我试过了:

  • 本地主机
  • 127.0.0.1
  • 192.168.1.29(我的本地ip)

可能出了什么问题。作为这个主题的新手,我无法调试它。谢谢你的帮助。

0 投票
1 回答
1989 浏览

java - MulticastSocket 多人游戏

我正在研究多人游戏中服务器-客户端通信的结构。

我得出的结论是 UDP 是最好的选择,因为它采用“一劳永逸”的使用方式,即使丢包也不会阻塞应用程序。我还将使用 TCP 发送需要可靠性的数据包,例如在登录过程和交换服务器更改、地图更改、更新等信息的过程中。它还将运行基于 IRC 的聊天。(所有命令实际上都是 IRC 样式的自定义消息)。

我想知道在服务器和客户端之间发送交互消息(移动、咒语、对象、动作等)的最佳方式是什么。

阅读了一些文档,我来到了 MulticastSocket。

我的问题是:

最好将连续的信息流发送到为每个播放器启动一个线程的所有客户端(就像我在 TCP 通信中所做的那样),其中每个 DatagramSockets 将侦听一个队列,将每个新消息发送到其客户端。这意味着所有地图和所有动作(假设地图上可能有 50 名玩家)将发送给所有玩家,并且每个数据包必须更大以包含所有这些信息。或者最好为每个地图使用一个线程,仅当某些玩家在该特定地图内时才处于活动状态,使用多播通信,仅向该地图内的玩家发送消息,并使用 MulticastSocket 进行侦听。

我阅读了有关使用多播的防火墙或路由器的问题,但我无法弄清楚这些问题可能是什么(不同于普通的 UDP)。

该应用程序应该由几乎没有配置问题的任何人使用。

0 投票
4 回答
32302 浏览

java - 使用 Ehcache 多播获取“无法分配请求的地址”java.net.SocketException

java.net.SocketException尝试启动多播提供程序时获取:

0 投票
1 回答
478 浏览

sockets - TCL 脚本无法配置多播套接字

我在 ubuntu 12.04 下使用 tcl 脚本,当我尝试配置多播套接字时遇到了一些问题。我要做的是将流量从某个套接字转发到多播套接字,但我不知道为什么尽管多播套接字创建得很好,显然;它没有绑定到我想要的多播组。

这是我正在使用的脚本

但是,如果我运行脚本并检查系统中的端口,则未为多播端口分配正确的多播 IP,如您所见

谁能告诉我原因?

提前致谢,

问候!

0 投票
1 回答
482 浏览

ubuntu-12.04 - 在 Ubuntu 12.04 上使用 openpgm

我在使用 Openpgm 库时遇到了问题,如果有人能帮助我解决这个问题,我将不胜感激。

我想在 Ubuntu 12.04 上使用 Openpgm。根据此链接:“ https://code.google.com/p/openpgm/wiki/OpenPgm5CReferenceBuildLibrary ” Openpgm 在 Ubuntu 8.04 到 10.10 上进行了测试。

我下载了最新版本的 Openpgm(5.2.122) 并用“scons”编译它没有错误。根据链接,我应该在路径“*./ref/debug/examples/”中看到一个名为“pgmrecv”和“pgmsend”的编译示例,但没有这样的示例,而是有“purinrecv”和“purinsend”。我首先像这样运行接收器:“./purinrecv -lp 3065”,然后像这样运行发送器:“./purinsend -lp 3065 please work”,两者都没有错误消息,但接收器没有收到任何东西。任何帮助,将不胜感激!

0 投票
2 回答
7169 浏览

java - MulticastSocket 构造函数和绑定到端口或 SocketAddress

我可能对这里的绑定术语有一个基本的误解,但我对MulticastSocket及其构造函数的用法感到困惑。他们不做理解他们应该做事情,任何能帮助我消除误解的人都将不胜感激。

首先是我想要达到的目标。我试图编写一个简短的程序来创建一个 MulticastSocket 将它绑定(即侦听)到特定的网络适配器上,然后加入特定的 Multicast 组。我已经尝试了以下(客户端)代码,它可以正常工作,我可以向它多播一个数据包,而多播套接字不会超时。

}

不幸的是,一旦我将 MulticastSocket 构造函数更改为MulticastSocket(SocketAddress bindaddr)它就停止工作。看来我只能使用绑定到端口的构造函数来工作,所以当调用这个构造函数时它到底绑定到什么,因为我在这个阶段没有指定网络适配器。(我知道我稍后会使用特定的 NetworkInterface 加入该组,但我如何确定在构造函数调用期间它不会绑定到任何适配器?)

我也可以在不指定适配器的情况下加入一个组,然后我不知道它绑定到哪个适配器。

任何人都可以解释绑定到端口的实际作用吗?是否可以只在特定的 NetworkInterface 上进行监听?

更新 #1 **

看了目前的回复,和同事讨论过,以下是我对Java MulticastSocket的理解:

  1. MulticastSocket() 创建一个多播套接字绑定一个随机选择的端口(由主机的底层操作系统绑定到通配符地址 0.0.0.0 即所有网卡。但是使用null调用此构造函数会创建一个未绑定的 MulticastSocket。在这种情况下调用`bind (SocketAddress) 方法绑定到 IP 和端口。
  2. MulticastSocket(int port) 创建一个绑定到特定端口但在每个 IP 地址上的多播套接字。
  3. MulticastSocket(SocketAddress sa) 创建一个绑定到指定 IP 地址(可以是任何 IP 地址,甚至是无效的多播地址)和端口的多播套接字。

使用选项 2,这意味着可能发送到指定端口的任何数据包,无论其实际目的地如何,都将被传递到 MulticastSocket。我说可能是因为组播数据包只有在组已加入时才会到达(但如果端口号匹配,其他发往非组播地址的数据包将到达?)

使用选项 3,我可以绑定到 IP 地址,并且只有目标匹配的数据包才会到达套接字。使用此选项绑定到特定网络接口的 IP 是完全可行的,但是不会收到多播数据包,因为它们不会发往网卡的特定 IP 地址(这就是为什么我从未看到它们到达代码示例)。也可以绑定到有效的多播地址,但在这种情况下,只有目的地与绑定的多播地址匹配的特定数据包才会到达套接字,而不管对joinGroup().

现在调用对套接字本身joinGroup()不做任何事情,而是向底层网络系统发出 IGMP 请求,以确保路由器、操作系统本身等实际上开始将指定的多播数据包路由到硬件并通过网络堆栈,最后路由到 Java MulticastSocket本身。

**更新 2 ** 引自“UNIX 网络编程”,Stevens,Fenner,Rudoff:

要接收多播数据报,进程必须加入多播组,并且它还必须将 UDP 套接字绑定到将用作发送到组的数据报的目标端口号的 prot 号。这两个操作是不同的,两者都是必需的。加入组会告诉主机的 IP 层和数据链路层接收发送到该组的多播数据报。绑定端口是应用程序向 UDP 指定它想要接收发送到该端口的数据报的方式。除了端口之外,一些应用程序还将多播地址绑定到套接字。这可以防止为该端口接收到其他单播、广播或多播地址的任何其他数据报传递到套接字。

我认为这说明了一切。

**更新 3 ** 只是想发布我测试的代码,评论解释了每个代码会发生什么。

0 投票
0 回答
255 浏览

c# - 如何使用 2 个网卡为 UDP 多播设置套接字?

这个问题就像How to setup a socket for UDP multicast with 2个网卡一样?,但这是针对 C++ 的,但我是单声道的,所以我想知道如何在 C# 中执行此操作。

我使用以下代码:

但是Linux下没有组播地址。

有谁能够帮我?