标签: multicast

在同一端口上接收多个多播源 - C,Linux

我有一个应用程序从同一端口上的多个组播源接收数据.我能够收到数据.但是,我试图考虑每个组的统计信息(即收到的消息,收到的字节数),所有数据都混淆了.有谁知道如何解决这个问题?如果我试着查看发件人的地址,那么它不是多播地址,而是发送机器的IP.

我使用以下套接字选项:

struct ip_mreq mreq;         
mreq.imr_multiaddr.s_addr = inet_addr("224.1.2.3");         
mreq.imr_interface.s_addr = INADDR_ANY;         
setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
Run Code Online (Sandbox Code Playgroud)

并且:

setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &reuse, sizeof(reuse));
Run Code Online (Sandbox Code Playgroud)

c sockets linux port multicast

13
推荐指数
3
解决办法
2万
查看次数

使用Socket或UdpClient进行多播是否有任何功能差异?

我熟悉多播等等.

使用了两个主要示例:

  1. 使用SocketBind()

  2. UDPClient.JoinMulticastNetwork()

一个指定一个LeaveMulticastGroup和另一个绑定和Joining没有LeaveMulticastGroup()

两种多播方法有什么区别,哪种方法更适合使用?

c# sockets multicast

13
推荐指数
1
解决办法
1362
查看次数

如何为存在2个网卡的UDP组播设置套接字?

我正在尝试使用套接字和c ++(c)获取udp组播数据.我有一个带有2个网卡的服务器,所以我需要将套接字绑定到特定的接口.目前我正在另一台只有一张网卡的服务器上进行测试.

当我使用INADDR_ANY时,我可以看到udp数据,当我绑定到特定接口时,我看不到任何数据.函数inet_addr没有失败(我现在删除了检查返回值).

代码如下.在具有一个网卡的服务器上,我的IP地址是10.81.128.44.我运行时收到数据:./ client 225.0.0.37 12346

这没有给我数据:./ client 225.0.0.37 12346 10.81.128.44

有什么建议?(希望代码编译,我删除了评论......)

   #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <time.h>
    #include <string.h>
    #include <stdio.h>

    #include <iostream>
    #include <string>

    using namespace std;

    #define HELLO_PORT 12345
    #define HELLO_GROUP "225.0.0.37"
    #define MSGBUFSIZE 256

    int main(int argc, char *argv[])
    {
        string source_iface;
        string group(HELLO_GROUP);
        int port(HELLO_PORT);

        if (!(argc < 2)) group = argv[1];
        if (!(argc < 3)) port = atoi(argv[2]);
        if (!(argc < 4)) source_iface = argv[3];

        cout << …
Run Code Online (Sandbox Code Playgroud)

c++ linux udp multicast

12
推荐指数
2
解决办法
4万
查看次数

有没有办法在同一个盒子上测试多播IP?

如果我想测试一组多播IP程序(发送器/接收器)而不必设置网络,可以在同一个盒子上完成吗?如果是这样,需要设置或完成哪些不同的操作?

multicast localhost

12
推荐指数
2
解决办法
2万
查看次数

在.NET中指定UDP多播应该使用的网络接口

在具有活动无线卡和LAN端口的计算机上,交叉电缆连接到运行相同应用程序的另一台计算机,我们需要通过LAN线路将UDP多播发送到另一台计算机.使用C#套接字,Windows似乎每次尝试通过WLAN适配器路由消息.

有没有办法指定发送UDP多播的网络接口?

.net c# sockets udp multicast

11
推荐指数
2
解决办法
1万
查看次数

调用setsockopt时出错"No such device"

我有一个代码,其中发送多播数据报.一段重要的代码:

uint32_t port;
int sockfd, err_ip;
const uint32_t sizebuff = 65535 - (20 + 8);
unsigned char *buff = (unsigned char *) malloc(sizebuff);
struct sockaddr_in servaddr, cliaddr;
struct in_addr serv_in_addr;
struct ip_mreq req;

port = str2uint16(cmdsrv->ipport);
bzero(buff, (size_t)sizebuff);
bzero(&servaddr, sizeof(servaddr));
bzero(&serv_in_addr, sizeof(serv_in_addr));
err_ip = inet_aton(cmdsrv->ipaddr, &serv_in_addr);

if(( err_ip != 0 ) && ( port != 0 )) {
   servaddr.sin_family = AF_INET;
   servaddr.sin_addr = serv_in_addr;
   servaddr.sin_port = htons(port);
   memcpy(&req.imr_multiaddr,&serv_in_addr,sizeof(req.imr_multiaddr));
   req.imr_interface.s_addr = INADDR_ANY;
   sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

   if( sockfd == -1 …
Run Code Online (Sandbox Code Playgroud)

c sockets udp multicast setsockopt

11
推荐指数
1
解决办法
2万
查看次数

设置ehcache复制 - 我需要哪些多播设置?

我想设置为记录在这里的Ehcache复制:http://ehcache.sourceforge.net/EhcacheUserGuide.html#id.s22.2
这是在Windows机器上,但在生产中在Solaris将最终运行.

说明如下设置提供者:

 <cacheManagerPeerProviderFactory
     class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
     properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
     multicastGroupPort=4446, timeToLive=32"/>
Run Code Online (Sandbox Code Playgroud)

像这样的倾听者:

<cacheManagerPeerListenerFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
    properties="hostName=localhost, port=40001,
    socketTimeoutMillis=2000"/>
Run Code Online (Sandbox Code Playgroud)

我的问题是:
多播IP地址和端口是否是任意的(我知道地址必须在特定范围内,但它们必须是特定的数字)?
它们是否需要由我们的系统管理员以某种方式设置(我在办公室网络上)?

我想在本地测试它,所以使用上面的配置运行两个单独的tomcat实例.我需要在每个方面做些什么改变?我知道两个听众都听不到同一个端口 - 但提供商怎么样?
另外,侦听器端口是否也是任意的?

我已经尝试过如上设置,但在我的测试中,缓存似乎没有被复制 - 在一个tomcat的缓存中添加的值不存在于另一个缓存中.
我可以做些什么来调试这种情况(除了数据包嗅探)?

在此先感谢任何帮助,一直在我的头发上撕裂!

java multicast ehcache

10
推荐指数
2
解决办法
2万
查看次数

java - Windows Server 2008上的MulticastSocket问题

我有一个java应用程序,它使用一些MulticastSocket实例来监听一些UDP多播源.每个这样的套接字由专用线程处理.
线程读取每个Datagram,解析它的内容并写入log(log4j)数据包的序列id(long)和接收数据报的时间戳.

当我尝试在Windows Server 2008 R2上运行相同应用程序的2个实例(具有2*6个内核)并比较2个应用程序创建的2个日志时,我注意到数据包的时间频繁不同.

大多数数据包同时由2个应用程序(milis)接收,但两个应用程序在同一数据包的接收时间之间经常存在大约1-7ms的差异.

我尝试在NIC中分配更多缓冲区,并使套接字读取缓冲区更大.此外,我尝试最小化GC运行,我也使用-verbose:gc,可以看到GC时间和有问题的时间差异不会同时发生.这允许我假设我的问题与GC无关.

没有观察到丢包问题,并且不太可能出现带宽问题.

欢迎提出意见/建议.谢谢.

java windows udp multicast windows-server-2008

10
推荐指数
1
解决办法
531
查看次数

在环回设备上进行多播

我希望将UDP组播数据包发送到环回地址,并在其他应用程序中接收相同的数据包.所有测试都在fedora core 17 Linux上完成.

我们的想法是通过RTSP/HTTP或任何其他网络协议接收视频流,并将其多播到环回地址,以便我可以使用VLC使用多播地址播放流.暂且不谈其他比特率和受控多播问题,我尝试在环回设备上读取一个视频文件和多播.但是当试图在vlc上播放同样的内容时它没有用.我能够看到数据包在wireshark中传输,但src ip取自我的默认网络接口(即接口,这是我的默认网关)

我已经尝试过以下命令

sudo ifconfig lo multicast
sudo ip route add 239.252.10.10 dev lo
Run Code Online (Sandbox Code Playgroud)

在这方面的任何建议都会非常有帮助.

测试程序代码粘贴在下面

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>


    #define MULTICAST_ADDRESS "239.252.10.10"
    #define UDP_PORT 1234
    #define INTERFACE_IP    "127.0.0.1"
    #define MTU 1474
    #define DATA_BUFFER_SIZE  (1024*1024)

    static int  socket_init(char *intf_ip) {
    int sd;
    struct in_addr localInterface;

      sd = socket (AF_INET, SOCK_DGRAM, 0);
      if (sd < 0) {
          perror ("Opening datagram socket error");
          return -1;
      } …
Run Code Online (Sandbox Code Playgroud)

c linux networking multicast

10
推荐指数
3
解决办法
2万
查看次数

在LAN上实现设备发现的最佳方法是什么

我在网络编程方面经验不足,我正在编写一个多平台系统,要求每个设备能够在同一个局域网内找到其他设备.我正在寻找正确的方法来做到这一点,并希望这里的人们可以给出一个很好的建议.这是我的设计要求:

  1. 我使用的是C++,解决方案需要跨平台,至少能够在iOS,Windows,Android上运行.

  2. 如果可能的话,系统应该非常轻,并且在没有特殊设置或网络要求的情况下工作.

以下是我正在考虑的不同方法:

  1. 使用uPnP协议,但我对它不是很熟悉,似乎没有很多关于这个主题的代码示例.

  2. 使用传统的套接字方法,在每个设备上创建服务器/客户端,并将数据包发送到LAN中的每个IP.然后手动完成所有事情.如果我错了,纠正我,如果我发送数据包到广播地址,这是否意味着系统自动将我的数据包发送到子网内的每个IP?

  3. 使用外部服务器,所有客户端都将注册,然后从该服务器获取有关其他(已注册)客户端的信息.但是,我不确定每个客户端应该连接哪些信息以确定它们位于同一LAN中.

让我知道我在想什么是有意义的.任何意见是极大的赞赏.

networking multicast broadcast device discovery

10
推荐指数
1
解决办法
4965
查看次数