本文介绍了多播不联网的电脑收到的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想一个组播发送到所有网络计算机。我有我的服务器我的计算机和网络上的其他计算机上设置。当我送出去的多播消息,我的计算机上运行的服务器选了罚款。联网的计算机没有得到任何东西,但。我试过设置TTL到最大值,而且什么也没做。我也试着用监控我的Wireshark的数据包,但没有看到任何东西(我不是很熟练的这个)。我很困惑,为什么我的电脑接收它,而不是其他的网络计算机。这里是code我用发送组播:

 的#include< SYS / types.h中> / *的类型定义* /
#包括LT&;&winsock2.h GT;为赢套接字API / * *调用/
#包括LT&;&ws2tcpip.h GT; / *为赢插座结构* /
#包括LT&;&stdio.h中GT; / *像printf()* /
#包括LT&;&stdlib.h中GT; / *为与atoi()* /
#包括LT&;&string.h中GT; / *函数strlen()* /MAX_LEN的#define 1024 / *最大字符串大小发送* /
#定义MIN_PORT 1024 / *最小端口允许* /
#定义MAX_PORT 65535 / *最大端口允许* /INT主(INT ARGC,CHAR *的argv []){  INT袜子; / *套接字描述符* /
  烧焦send_str [MAX_LEN] / *字符串发送* /
  结构SOCKADDR_IN mc_addr; / *套接字地址结构* /
  INT SEND_LEN; / *字符串长度发送* /
  字符* mc_addr_str; / *组播IP地址* /
  无符号短mc_port; / *播端口* /
  unsigned char型mc_ttl = 255; / *生存时间(跳数)* /
  WSADATA WSADATA; / * Windows套接字DLL结构* /  / *验证的参数的数目* /
  如果(argc个!= 3){
    fprintf中(标准错误,
            用法:%S<组播IP><多播端口与GT; \\ N,
            的argv [0]);
    出口(1);
  }  mc_addr_str =的argv [1]; / * ARG 1:组播IP地址* /
  mc_port =与atoi(argv的[2]); / * ARG 2:播端口号* /  / *验证端口范围* /
  如果((mc_port< MIN_PORT)||(mc_port> MAX_PORT)){
    fprintf中(标准错误,无效端口号参数%d \\ N,
            mc_port);
    fprintf中(标准错误,有效范围为%d到%d之间。\\ n
            MIN_PORT,MAX_PORT);
    出口(1);
  }  / *加载的Winsock 2.0 DLL * /
  如果(调用WSAStartup(MAKEWORD(2,0),&放大器;!WSADATA)= 0){
    fprintf中(标准错误的WSAStartup()失败);
    出口(1);
  }  / *创建一个套接字发送到多播地址* /
  如果((袜子=插座(PF_INET,SOCK_DGRAM,IPPROTO_UDP))小于0){
    PERROR(插座()失败);
    出口(1);
  }  / *设定的TTL(生存时间/跳数)为发送* /
  如果((setsockopt的(袜子,IPPROTO_IP,IP_MULTICAST_TTL,
       (无效*)及mc_ttl,sizeof的(mc_ttl)))< 0){
    PERROR(setsockopt的()失败);
    出口(1);
  }  / *构建一个多播地址的结构* /
  memset的(安培; mc_addr,0,sizeof的(mc_addr));
  mc_addr.sin_family = AF_INET;
  mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str);
  mc_addr.sin_port = htons(mc_port);  的printf(开始打字(返回到发送,CTRL-C退出):\\ n);  / *明确的发送缓冲区* /
  memset的(send_str,0,sizeof的(send_str));  而(与fgets(send_str,MAX_LEN,标准输入)){
    SEND_LEN = strlen的(send_str);    / *发送串多播地址* /
    如果((SENDTO(袜子,send_str,SEND_LEN,0,
         (结构sockaddr *)及mc_addr,
         的sizeof(mc_addr)))!= SEND_LEN){
      PERROR(SENDTO()发送的字节数不正确);
      出口(1);
    }    / *明确的发送缓冲区* /
    memset的(send_str,0,sizeof的(send_str));
  }  关闭套接字(袜子);
  WSACleanup(); / *清理Winsock的* /  出口(0);
}


解决方案

请看一看的

摘录

Specifically, 224.0.0.1 is reserved for "All Systems on this Subnet".

I don't know of any command that would confirm that your switches support multicasting. My rule of thumb is: consumer level switches don't. Enterprise level switches do. Everything in between; google is your friend.

And last week I found out the hard way that in enterprise level switches it's configurable too (though I'm no sys admin and I haven't got a clue how to do that...)

这篇关于多播不联网的电脑收到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 12:01