- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在一台有两个 NIC 的机器上写一个多播客户端,但我无法让它工作。我可以用嗅探器看到,一旦我启动程序,NIC (eth4) 就开始接收多播数据报,但是,我无法在我的程序中接收到任何数据。
运行“tshark -i eth4 -R udp.port==xxx(多播端口)”时
我得到:
1059.435483 y.y.y.y. (some ip) -> z.z.z.z (multicast ip, not my eth4 NIC IP) UDP Source port: kkk (some other port) Destination port: xxx (multicast port)
在网上搜索了一些例子/解释,但似乎我做的和其他人做的一样。任何帮助将不胜感激。 (与路由/iptables/代码有关吗?)
bool connectionManager::sendMulticastJoinRequest()
{
struct sockaddr_in localSock;
struct ip_mreqn group;
char* mc_addr_str = SystemManager::Instance()->getTCP_IP_CHT();
char* local_addr_str = SystemManager::Instance()->getlocal_IP_TOLA();
int port = SystemManager::Instance()->getTCP_Port_CHT();
/* Create a datagram socket on which to receive. */
CHT_UDP_Feed_sock = socket(AF_INET, SOCK_DGRAM, 0);
if(CHT_UDP_Feed_sock < 0)
{
perror("Opening datagram socket error");
return false;
}
/* application to receive copies of the multicast datagrams. */
{
int reuse = 1;
if(setsockopt(CHT_UDP_Feed_sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0)
{
perror("Setting SO_REUSEADDR error");
close(CHT_UDP_Feed_sock);
return false;
}
}
/* Bind to the proper port number with the IP address */
/* specified as INADDR_ANY. */
memset((char *) &localSock, 0, sizeof(localSock));
localSock.sin_family = AF_INET;
localSock.sin_port = htons(port);
localSock.sin_addr.s_addr =inet_addr(local_addr_str); // htonl(INADDR_ANY); //
if(bind(CHT_UDP_Feed_sock, (struct sockaddr*)&localSock, sizeof(localSock)))
{
perror("Binding datagram socket error");
close(CHT_UDP_Feed_sock);
return false;
}
/* Join the multicast group mc_addr_str on the local local_addr_str */
/* interface. Note that this IP_ADD_MEMBERSHIP option must be */
/* called for each local interface over which the multicast */
/* datagrams are to be received. */
group.imr_ifindex = if_nametoindex("eth4");
if (setsockopt(CHT_UDP_Feed_sock, SOL_SOCKET, SO_BINDTODEVICE, "eth4", 5) < 0)
return false;
group.imr_multiaddr.s_addr = inet_addr(mc_addr_str);
group.imr_address.s_addr = htonl(INADDR_ANY); //also tried inet_addr(local_addr_str); instead
if(setsockopt(CHT_UDP_Feed_sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group, sizeof(group)) < 0)
{
perror("Adding multicast group error");
close(CHT_UDP_Feed_sock);
return false;
}
// Read from the socket.
char databuf[1024];
int datalen = sizeof(databuf);
if(read(CHT_UDP_Feed_sock, databuf, datalen) < 0)
{
perror("Reading datagram message error");
close(CHT_UDP_Feed_sock);
return false;
}
else
{
printf("Reading datagram message...OK.\n");
printf("The message from multicast server is: \"%s\"\n", databuf);
}
return true;
}
最佳答案
只是一个想法,(我没有做太多关于多播的工作),但这可能是因为你绑定(bind)到一个特定的 IP 地址吗?套接字可能只接受发往其绑定(bind) IP 地址的数据包并拒绝多播数据包?
关于networking - 使用多个 NIC 在 C++ 中收听多播的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5132654/
在 win32 多网卡计算机上,如果所有网卡都配置了不同的 DNS 且具有相同的指标,如何在特定网卡上强制通过 gethostbyname() 进行 DNS 解析? 否则,每次应用程序执行 getho
在 DPKD 中,ETH_RSS_IPV4 数据流默认未针对 XL710 Intel NIC 激活。因此,当您想要在 lcore 之间分发数据包时,您必须选择 XL710 支持的其他 IPv4 数据流
我正在用java编写,我需要定期获取NIC的输出(与我在Windows任务管理器中看到的信息相同),有没有办法在java中采样NIC的当前吞吐量? 最佳答案 Java 没有内置方法来访问低级操作系统信
我试图理解网络驱动程序代码中使用的 Rx 和 Tx 描述符的概念。 是软件(RAM)或硬件(NIC 卡)中的描述符。 他们是如何填满的。 编辑:所以在 Realtek 卡驱动程序代码中。我定义了以下结
我已经打开了一个 UDP 套接字来监听传入的数据包。我可以在wireshark日志中看到到达网卡的数据包。但通过 Socket 读取时则不可用。 “netsata”命令显示监听任何传入 UDP 消息的
我需要在焦点丢失事件中验证 NIC。我使用了这段代码。即使我提供了正确的 NIC,它也不适用于所有打印 Invalid NIC 消息的情况。任何人都可以说代码中是否有问题并告诉我代码中更正位置的指南。
我有两个字段,网卡和用户名。他们的验证是 NIC 检查数字或字符 用户名字段必须包含超过 8 个字符(包括日期)从 NIC 出生。 到目前为止,我已经在我的网卡上尝试过这个。 function val
爱好者/非专业程序员在这里。我对网络寻址不是很了解。 我有一台同时连接到两个不同网络的计算机。 1个通过无线,1个通过网线。 在我的 DotNet (c#) windows 窗体应用程序中,我希望它通
我想编写一个没有底层操作系统、在 x86 架构上运行并驱动任何现代网络接口(interface) Controller 的 IO 密集型应用程序。 通过查看 Linux 的驱动程序源代码,我知道需要数
据我所知,DPDK 代码示例对整个应用程序(或给定端口的所有队列)使用单个 rte_mempool。 假设所有 EAL 线程只与它们自己的 RX/TX 队列交互,是否建议每个 lcore/队列有一个内
在我破坏了为虚拟机创建的默认用户后,我想重置密码或创建新用户。我收到以下错误: Failed to restart the virtual machine 'vm'. Error: Cannot pr
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们
我买了一 block 技嘉g1.guerilla主板,网卡是主板上专用的飞思卡尔芯片。它连接到 PCI 总线。 我运行的是 Linux,不幸的是没有适用的驱动程序。我正在写一个,但是我遇到了一个基本问
我正在为我最近工作的网络项目寻求帮助和意见建议。这要求 Linux 机器成为被动网络设备。 网络数据包从一个网络接口(interface)进来,从另一个接口(interface)出来(net--eth
无法正确表述我的问题,因此 Google 搜索对我没有帮助。有人可以从内核的角度解释 NIC 的工作原理吗?为了让内核与设备对话,您需要一个驱动程序/内核模块。我的问题: 我了解设备在 Linux 中
我在使用基于 MIPS 处理器和 Linux 2.6 的主板时遇到了一个非常奇怪的问题。所有传入的以太网数据包都有 NIC 中断。如果我发送 10.000 个数据包,我可以看到发生了 10.000 个
我使用 Cent OS 6.2(64 位),我有 4 个 NIC 接口(interface),因为我试图连接两个具有不同子网的 NIC, em1 与 10.30.2.x 系列em4 与 10.30.4
我有一个 Intel 82598EB 10GBE 网卡。 我需要接收流量而不丢包。 数据速率为 4-5 Gbps,数据包大小为 1500-9600 字节。 我已经配置了 smb 和 irq 关联性。我
我想不出更好的标题名称,但切中要点。 我想知道无线 NIC/NIC 如何与其连接的系统一起运行(不是通过连接,而是内部连接或 pci、usb 或任何其他外围设备),以及卡本身可以做什么与系统做什么(除
我对具有两个 NIC 的 Linux 机器上的流量路由有疑问。其中一个 NIC 在我们的 DMZ 网络上 (10.1.9.0/24),另一个在我们的本地网络上 (10.1.0.0./21): defa
我是一名优秀的程序员,十分优秀!