问题标签 [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 投票
1 回答
67 浏览

java - MulticastSocket.send() 是可重入的吗?

我有 2 个要调用的线程:

multicastSocket.send(dP1)

multicastSocket.send(dP2)

其中dP1dP2分别是不同的DatagramPacket对象,multicastSocket是 MulticastSocket 的共享实例。

我不明白如果multicastSocket,线程send()在同一时刻调用是否会发生并发问题。

0 投票
1 回答
292 浏览

c# - 在 C# 中使用 udpmulticasting 发送结构数据

我正在尝试通过将其转换为字节数组来多播结构数据。下面的代码一切正常,除了字符串变量的结构数据没有在客户端收到,因为它是从服务器发送的,而是显示空字符串或其他字符。请建议我解决这个问题。

提前致谢。

这是我的代码:

服务器代码

客户代码

输出

服务器

客户

0 投票
1 回答
1211 浏览

java - 为什么 MulticastSocket.setNetworkInterface() 使用 Java 8 运行时要慢得多?

我正在运行以下程序,与 Java 7 运行时相比,我使用 Java 8 运行时要慢得多。

当我在 java 8 上运行它时,大约需要 3500 毫秒。在 Java 7 上大约需要 150 毫秒。

我正在使用以下 Java 版本:

我使用的是 Windows 7,Service Pack 1,具体信息:

我的机器有 25 个不同的接口(很多虚拟接口),但每个接口的操作时间大致相同。

有些调用失败,但即使是成功的调用也很慢。一个有趣的事实是,Java 版本之间有关失败操作的错误消息是不同的:

爪哇 7:

爪哇 8:

运行jstack我看到在以下线程堆栈中花费的时间最多:

我已经尝试禁用所有 Windows 防火墙,但这没有任何区别。

该程序本身可能没有多大意义,但我正在尝试解决运行此类代码的第三方平台的问题,为什么重写它不是一种选择。

该问题可以在我们办公室的其他工作站上重现。

有什么想法可能导致这种行为或我如何进一步排除故障?

0 投票
2 回答
288 浏览

c - C中的多播:使用addrinfo时二进制不接收

我在两个几乎相同的程序中遇到了这个有趣的小问题。我想做的是在多播套接字上发送一些数据并接收它。现在,如果发件人收到邮件我没问题(我将选项设置为稍后不接收)。

我有两个实现案例。在第一种方法中,我使用初始化sockaddr结构然后绑定到并加入同一个套接字上的多播组的传统方法。然而,这依赖于 IPv4/IPv6,为了避免这种情况,我尝试addrinfo在程序的第二个变体中使用结构。这两个程序都在下面给出。

问题是,在第一个用例中接收到消息,我使用的是常规sockaddr,而在第二种情况下没有接收到消息/套接字描述符。有人可以帮我解释一下为什么会这样吗?

变体 1(带有sockaddr

变体 2(带有addrinfo

0 投票
1 回答
1664 浏览

ruby - 如何在一个接口上加入多个多播组

我可用的 Ruby 版本是 1.8.7,无法升级,因为它是目前在所有公司 Linux 服务器上使用的标准映像的一部分,我所做的任何事情都需要能够在所有这些服务器上运行没有问题(我希望这不会成为问题)

我正在做的项目是在 Linux 服务器上重新创建当前在 Windows 上运行的应用程序。应用程序获取多播组和接口的列表并尝试加入组,然后侦听任何数据(不管是什么)报告它是否可以加入并且数据在那里。它可以帮助我们在我们的环境中在将实际软件部署到服务器之前证明网络连接性。它将接收的数据将是来自交易所的二进制编码财务信息,因此我不需要输出(因此注释掉的行和输出)我只需要检查它是否可用于服务器。

我已经在网上阅读并找到了我拼凑成一个小版本的代码片段,它加入了绑定到 1 个接口的 1 个多播组,并在一段时间内监听数据,报告是否收到任何数据。

然后我想添加第二个多播组,这是我对如何实现这一点缺乏了解的地方。我的代码如下:

运行此程序时出现的错误是:

[root@dt1d-ddncche21a ~]# ./UDPServer.rb ./UDPServer.rb:35:in `setsockopt': 地址已经在使用 (Errno::EADDRINUSE) 来自 ./UDPServer.rb:35

所以这就是我所在的地方,并且可以首先使用关于错误的指针(希望通过更新代码),然后一旦我这个示例工作下一步将在混音中添加第二个接口以收听再次多个多播组,

0 投票
1 回答
231 浏览

ruby - 如何同时监控多个组播组

我目前正在使用 Ruby 1.8.7 开发 Windows 工具的 Linux 版本,该工具根据用户配置的多播组和端口检查最多 2 个接口上的多播数据。

我有一个以前的问题,我不确定如何收听多个多播频道,但这已从上一个问题中解决。

这导致了下一个问题。我需要收听多个多播组,并且:

  • 确定每个特定组是否收到任何数据,并报告哪些有数据,哪些没有

  • 同时在所有通道上侦听用户可配置超时期限的数据

我试图让它在一个单独的代码中工作,其中多播组、端口和接口都是硬编码的,一旦我把它整理并理解了,我会将它迁移到我的主程序中,用户输入和验证已经完成. 我已经更新了我的简单程序代码,现在它看起来像:

但这产生了问题,因为 B 套接字上的数据不存在,因此它报告没有收到任何内容。

我理解这样做的原因是第二个 recvfrom 超时,因此我们最终进入了代码的救援部分。但由于这是我的第一个 Ruby 程序,而且我仍在学习它,所以我不确定如何解决它。

简而言之,我需要了解:

  • 如何确定在 sockA 上接收到哪个通道数据,因为该套接字上有 2 个多播组

  • 如何同时监控可配置数量的多播组的数据,并且没有一个接收数据失败导致输出不正确的错误

0 投票
0 回答
60 浏览

c - 如何使用 C 编程实现多播套接字连接

丢包有问题。我正在做套接字连接以获取 udp 数据包,但我认为我的多播套接字连接可能存在问题。请帮助我——我的代码是否正确?

0 投票
1 回答
105 浏览

java - Android 和桌面之间的消息传递

我正在尝试制作一个能够向计算机发送消息并从中接收消息的 Android 应用程序。这是非常基本的。问题是,我已经通过多播实现了这一点,尽管并不完全如此。我的应用程序能够从计算机接收消息(它使用我制作的 java 应用程序来接收和发送消息)。但是,当我尝试从设备向计算机发送消息时,消息不会到达计算机。我的意思是,应用程序。

桌面应用程序和 Android 应用程序都使用相同的客户端 - 服务器类。这就是让我如此困惑的原因。因为,当我使用相同的类时,为什么它以一种方式工作而不是另一种?我只是不不。

桌面应用程序在 Windows 上运行。

此外,当 Android 应用程序收到一条消息时,它会通过以下方式接收它:“Message 1����������������������������... " 何时应收到消息:"消息 1"。我不知道这是否相关。

代码如下:

服务器类:

客户端类:

这个类是我为桌面应用程序制作的。我为 Android 应用程序制作的类是相同的,但我必须将其更改System.out.println()Log.v(). 至于其他的,一模一样。

因此,如果您碰巧知道会发生什么,我将非常感谢您在该主题方面的帮助。

谢谢!

0 投票
1 回答
40 浏览

sockets - 验证多播端口范围

我需要编写一个客户端服务器代码。客户端可以发送\接收来自多个多播地址的数据包,并且还应该在发送\接收数据包之前检查这些 IP\端口范围的有效性。

所以我查看 RFC-5771 IANA Guidelines for IPv4 Multicast Address Assignments并找到了多播IP地址的范围。

我在哪里可以找到合法(不被其他应用程序占用)多播端口的范围?

谢谢。

0 投票
2 回答
546 浏览

java - Java 广播:抛出 BindException

我希望我的客户端应用程序能够连接到服务器应用程序。

问题是我的客户端不知道服务器 ip(在 LAN 中)。

所以我尝试使用 java 对象MulticastSocket。幸运的是,Oracle 有一个带有Broadcasting 示例的页面。

在这里,我重新排列了它以供我使用。

服务器代码:

客户端代码:

当我运行 Srver: 没问题,但是当我尝试运行客户端时,它会抛出java.net.BindException: Address already in use导致客户端和服务器都在监听/发送信息port 4445

但不是吗?要相互连接,它们必须具有相同的端口号,否则它们将永远不会“相遇”

我能解决这个问题吗?如何?

端口号是否正确?

这是对未知服务器 ip 问题的正确解决方案吗?

谢谢!