标签: multicast

在c#中需要有关组播udp服务器发现的帮助

作为这个问题的后续问题,我已经在我的本地机器上运行了一个解决方案,但是没有在网络上的机器上运行.

我不太了解那些基础知识以外的插座,所以请耐心等待.目标是让客户端在本地网络上查找服务器,这是一些剪切/粘贴/编辑代码的结果.

这是客户端代码:

IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10294);

    byte[] data = new byte[1024];
    public Form1()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {

        Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 10);
        string welcome = "What's your IP?";
        data = Encoding.ASCII.GetBytes(welcome);
        client.SendTo(data, data.Length, SocketFlags.None, ipep);
        IPEndPoint server = new IPEndPoint(IPAddress.Any, 0);
        EndPoint tmpRemote = (EndPoint)server;
        data = new byte[1024];
        int recv = client.ReceiveFrom(data, ref tmpRemote);
        this.IP.Text = ((IPEndPoint)tmpRemote).Address.ToString(); //set textbox
        this.Port.Text = …
Run Code Online (Sandbox Code Playgroud)

.net c# udp multicast

6
推荐指数
1
解决办法
5903
查看次数

Java中可靠的多播

在Java世界中,可靠多播的现代方法是什么?

在网上搜索,我想出了JGroups和JRMS.JGroups在我的情况下似乎有些过分(我希望有一组相同的节点,这些节点通过一起协作并通过通知每个现有节点来加入这个组).JRMS看起来已经死了.

我无法找到任何针对Java的PGM协议的特定实现.

java multicast

6
推荐指数
1
解决办法
2541
查看次数

HTML5 + JS足以进行局域网通信?

我一直在集思广益一个webapp的想法,比如Turntable.fm,但是对于局域网来说,同样地,SAME网络上的所有计算机都不是同时下载一首歌(杀死带宽)而是流式传输音乐.基本功能是用于"主"PC(带扬声器的PC)播放本地歌曲或通过LAN接收歌曲然后播放它们.

我的问题是,HTML5页面(在线托管)是否有办法使用JS检测局域网用户并直接相互通信而无需任何中央服务器?举例说明:

Office LAN has 2 users, Bob and Bill
Bob enters lanmusic.com
Bill enters lanmusic.com
Internet dies, LAN is fine.
Bob can still detect via the page that local user Bill is on the page too
Bill sends a song to Bob through the page directly
Bob plays song with page's javascript music player
Run Code Online (Sandbox Code Playgroud)

所以关键点:

  • 仅限Javascript/HTML5
  • 除了初始加载的网络应用程序外,不依赖于互联网
  • 可以检测局域网用户,进行局域网连接

javascript html5 lan multicast websocket

6
推荐指数
1
解决办法
4549
查看次数

如果端口对多播组无关紧要,为什么DatagramSocket.joinGroup()方法采用SocketAddress?

我只是好奇.这是一个API错误吗?加入组播组时,不要使用端口,只使用组播组(IP)作为组播组,对吗?

这是一个令人烦恼的情况,是否会使用PORT?

java sockets networking network-programming multicast

6
推荐指数
1
解决办法
895
查看次数

刷新组播组成员资格

我有几台嵌入式计算机正在监听并将rtp音频数据流式传输到多播组.它们连接到智能管理交换机(Netgear GS108Ev2),它在其端口上执行基本的igmp监听和多播过滤,因此我的(W)LAN的其余部分不会被淹没.

开始时一切正常,大约500-520秒.之后,他们在离开并再次加入该组之前不会再收到任何数据.我想交换机在超时后"忘记"加入了.

有没有办法刷新组成员资格,即让交换机知道,还有人在监听,而不会丢失数据包?

系统信息:

Arch: blackfin

# cat /proc/version
Linux version 2.6.28.10-ADI-2009R1-uCBF54x-EMM
(gcc version 4.3.3 (ADI) ) #158 PREEMPT Tue Jun 5 20:05:42 CEST 2012
Run Code Online (Sandbox Code Playgroud)

c linux multicast uclinux

6
推荐指数
1
解决办法
6050
查看次数

套接字未加入多播组,但可以接收数据.

当我创建两个udp套接字并将它们绑定到INADDR_ANY和相同的端口号时.但其中一人加入了一个组播组.但是它们都可以从同一个组播组接收数据,即使其中一个套接字没有加入组播组.

c linux network-programming multicast

6
推荐指数
2
解决办法
1946
查看次数

Windows Python多播上的错误10049

这是一些用于设置多播接收器的Python代码.它在mac和linux上运行良好.

import socket, struct

ADDR='239.239.250.1'
PORT=8001

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((ADDR, PORT))
mreq = struct.pack("4sl", socket.inet_aton(ADDR), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
Run Code Online (Sandbox Code Playgroud)

但在Windows上运行时在绑定上收到错误10049.

Z:\winx>c:\Python27\python.exe q2.py
Traceback (most recent call last):
  File "q2.py", line 11, in <module>
    sock.bind((ADDR,PORT))
  File "c:\Python27\lib\socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 10049] The requested address is not valid in its context
Run Code Online (Sandbox Code Playgroud)

Windows多播是否存在已知问题?如果没有,我可以采取哪些步骤进行诊断?

python windows multicast

6
推荐指数
1
解决办法
2377
查看次数

Java UDP多播,确定哪个组发送了数据包

我正在创建一个应用程序,其中存在某个线程(MulticastListenerThread),该线程具有MulticastSocket并且正在侦听发送到套接字正在侦听的多播组的UDP(数据报)数据包.

这有效.我可以加入多播组,向该组发送消息并通过MulticastSocket接收它.

但是,我想从接收器的角度确定他收到的数据包组播组.以下代码为我提供了数据包发起者的地址,而不是多播组:

DatagramPacket packet = new DatagramPacket(buf, buf.length);
mlcSenderSocket.receive(packet);
String src_addr = packet.getAddress().getHostAddress();
Run Code Online (Sandbox Code Playgroud)

发送数据包的代码如下:

InetAddress address = InetAddress.getByName(dest);
packet = new DatagramPacket(payload, payload.length,
    address, mlcEventPort);
LLog.out(this,"[NC] MLC packet Sent to ev port MLC " + mlcEventPort
    + " and to addr " + address);
mlcSenderSocket.send(packet);
Run Code Online (Sandbox Code Playgroud)

是否可以确定哪个组发送了数据包?

编辑:

看来这是不可能的.在性能影响方面(我正在为IoT设备工作),为每个多播组分配一个套接字(因此,每个组的一个监听器线程)是否可行?可能会加入许多群体(数十或数百甚至).如果它是可行的,那么我只需要手动将连接的组地址保留在某处并在必要时引用它.欢迎对其他工作的建议!

java networking udp multicast

6
推荐指数
1
解决办法
1572
查看次数

Linux中的INADDR_ANY与Windows套接字编程之间的区别

我的Winsock Delphi应用程序应该在所有网络接口上侦听多播UDP/IP流.它正常收听,直到我在具有不同网络适配器优先级顺序的另一台PC上尝试它.

然后我开始研究问题,并在一些论坛上发现INADDR_ANY(或0.0.0.0)在Windows和Linux中有不同的含义:

你能否证实或否认这一点?

如何在所有界面上真实收听?

这是我的一小段代码:

TMulticastListener = class(TThread)
private
  mreq: ip_mreq;
  ............
end;

constructor TMulticastListener.Create;
var err: Integer;
    wData: WsaData;
    reuse: Integer;
begin
  inherited Create(true);

  err := WSAStartup(MAKEWORD(2, 2), wData);
  if err = SOCKET_ERROR then begin
    // Tell the user that we could not find a usable Winsock DLL
    perror('WSAStartup');
    Exit;
  end;

  // create what looks like an ordinary UDP socket
  fd := …
Run Code Online (Sandbox Code Playgroud)

sockets linux delphi multicast winsock

6
推荐指数
1
解决办法
1068
查看次数

类型'Observable &lt;any&gt;'不存在属性'connect'| RXJS组播

我有一个Observable产生单播值(对于所有观察者来说都是如此)。但是,当我打算使用RxJs多播运算符转换为多播时,它将返回以下错误。

属性“连接”在类型“可观察”上不存在

单播(工作代码)-

let source4$ = interval(1000).pipe(take(4));

source4$.subscribe(val => {
    console.log(`Observer 1: ${val}`);
});

setTimeout(function() {
    source4$.subscribe(val => {
        console.log(`Observer 2: ${val}`);
    }); 
}, 1000);
setTimeout(function() {
    source4$.subscribe(val => {
        console.log(`Observer 3: ${val}`);
    }); 
}, 2000);
Run Code Online (Sandbox Code Playgroud)

组播(无效代码)-

let source4$ = interval(1000).pipe(take(4), multicast(new Subject()));

source4$.subscribe(val => {
    console.log(`Observer 1: ${val}`);
});

setTimeout(function() {
    source4$.subscribe(val => {
        console.log(`Observer 2: ${val}`);
    }); 
}, 1000);
setTimeout(function() {
    source4$.subscribe(val => {
        console.log(`Observer 3: ${val}`);
    }); 
}, 2000);

source4$.connect();
Run Code Online (Sandbox Code Playgroud)

multicast subject rxjs typescript

6
推荐指数
1
解决办法
1046
查看次数