- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是在 Windows 7 上用 C++ 编写的...我是多播套接字的新手,从其他人那里继承了这段代码。
我有这个系统,其中有多台计算机在 ADDR 225.1.1.2(为什么不)创建/加入多播套接字,一旦套接字连接,它们就会定期相互“聊天”,发送各种消息。如果我在网络上只启动一台计算机(称之为“A”)并让它每秒定期发送一次“keepalive”消息,但没有收到任何消息(没有其他人连接到多播地址),然后让它坐下大约 3 分钟,然后启动另一台计算机 B,第一台计算机 A 没有看到计算机 B 的广播消息! B 在发送数据包时没有出错,A 在接收任何东西时都没有出错(从不调用 receive)。我不知道如果某些东西正在关闭接收部分,我将如何获得通知,或者我将如何注册此类信息。
如果我启动彼此相对靠近的两台机器,每台机器都会看到另一台机器的 keepalive 数据包。接收发生在两台机器上。但是,同样,如果我在启动第一台计算机后超过 3 分钟启动第二台计算机,则第一台计算机的 Receive 方法似乎已经进入休眠状态,或者消失了,或者处于昏迷状态,或者其他什么。没有产生错误,但显然看不到机器 B 的数据包。 (另外,我在调试器输出中看到 3 个线程已退出,但它们不是我创建的线程,它们是系统线程)。但是最近启动的机器 B 确实看到了来自机器 A 的 keepalive 数据包。
这是套接字调用:
hSock = WSASocket(
AF_INET,
SOCK_DGRAM,
0,
NULL,
0,
WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF | WSA_FLAG_OVERLAPPED);
setsockopt(hSock,SOL_SOCKET,SO_REUSEADDR,(char *) &bVal,sizeof(bVal));
srcIP.sin_family=AF_INET;
// Need to bind to local interface
srcIP.sin_addr.s_addr=inet_addr(("225.1.1.2"); // htonl(INADDR_ANY);
srcIP.sin_port=htons(5555);
bind( hSock,(struct sockaddr FAR *) &srcIP,sizeof(srcIP) );
nIP_TTL=36;
setsockopt(hSock,IPPROTO_IP,IP_MULTICAST_TTL,(char *) &nIP_TTL,sizeof(int));
mreq.imr_multiaddr.s_addr=inet_addr("225.1.1.2");
mreq.imr_interface.s_addr=inet_addr("225.1.1.2");
setsockopt(hSock,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *) &mreq,sizeof(mreq));
这是我在互联网上看到的:
最佳答案
我认为你上面的代码有错误。我认为您必须为 imr_interface 指定计算机网络接口(interface)的本地 IP 地址(通常是计算机的 IP 地址,而不是多播地址)。也就是说,您要在其上发送/接收多播流量的接口(interface)。我假设您的代码根本没有加入多播组,它只是偶然工作了一段时间。
即使您根本无法调用 IP_ADD_MEMBERSHIP,它也可能会工作几分钟。
奇怪的 3 分钟行为听起来完全像是一个非工作加入或 IGMP 监听问题。
IPv4 多播非常微妙,主机、操作系统和中间硬件组件的行为也非常微妙。
当您的应用程序处理多播时,操作系统会发送和接收 IGMP 消息。这是自动的,依赖于对 IP_ADD_MEMBERSHIP 等的正确调用,但除此之外您无法控制它。中间硬件组件(WLAN 路由器、交换机、电力线适配器……)都发挥着神奇的作用使多播正常工作,而这种神奇的作用往往会隐藏问题并制造问题。
一个示例:如果您的进程为多播地址 X 调用 IP_ADD_MEMBERHIP,那么机器上的所有其他进程也将看到来自地址 X 的多播流量,即使它们未能调用 IP_ADD_MEMBERSHIP。
丢失(或伪造)ADD_MEMBERSHIP 的典型症状是:工作几分钟(通常为 3 到 5 分钟)然后突然停止工作,就好像电缆被拉了一样。在接下来的 3-5 分钟内,重新启动其中一个程序可再次解决问题。但是,即使 ADD_MEMBERSHIP 是 100% 正确的,您在穿越诸如电力线适配器之类的非平凡网络组件时也会出现此类症状。那么这是您使用的操作系统与您使用的路由器/交换机/适配器之间的某种不兼容。
要对此进行调试,请尝试检查主机操作系统的 IGMP 状态。不过,我不知道如何在 Windows 上执行此操作。
关于sockets - Windows 7 组播接收在几分钟后停止接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018282/
基于 socket.io 的官方网站 http://socket.io/#how-to-use , 我找不到任何术语。socket.emit 、 socket.on 和 socket.send 之间有
我正在使用 lua-socket 3.0rc1.3(Ubuntu Trusty 附带)和 lua 5.1。我正在尝试监听 unix 域套接字,我能找到的唯一示例代码是 this -- send std
这两者有什么区别? 我注意到如果我在一个工作程序中从 socket.emit 更改为 socket.send ,服务器无法接收到消息,虽然我不明白为什么。 我还注意到,在我的程序中,如果我从 sock
使用套接字在两台服务器之间发送数据是个好主意,还是应该使用 MQ 之类的东西来移动数据。 我的问题:套接字是否可靠,如果我只需要一次/有保证的数据传输? 还有其他解决方案吗? 谢谢。 最佳答案 套接字
引自 this socket tutorial : Sockets come in two primary flavors. An active socket is connected to a
我已经安装了在端口81上运行的流服务器“Lighttpd”(light-tpd)。 我有一个C程序,它使用套接字api创建的服务器套接字在端口80上监听http请求。 我希望从客户端收到端口80上的请
这是我正在尝试做的事情: 当有新消息可用时,服务器会将消息发送给已连接的客户端。另一方面,客户端在连接时尝试使用send()向服务器发送消息,然后使用recv()接收消息,此后,客户端调用close(
如何将消息发送到动态 session 室,以及当服务器收到该消息时,如何将该消息发送到其他成员所在的同一个 session 室? table_id是房间,它将动态设置。 客户: var table_i
这是我尝试但不起作用的方法。我可以将传入的消息从WebSocket连接转发到NetSocket,但是只有NetSocket收到的第一个消息才到达WebSocket后面的客户端。 const WebSo
我正在实现使用boost将xml发送到客户端的服务器。我面临的问题是缓冲区不会立即发送并累积到一个点,然后发送整个内容。这在我的客户端造成了一个问题,当它解析xml时,它可能具有不完整的xml标记(不
尝试使用Nginx代理Gunicorn套接字。 /etc/systemd/system/gunicorn.service文件 [Unit] Description=gunicorn daemon Af
我正在使用Lua套接字和TCP制作像聊天客户端和服务器这样的IRC。我要弄清楚的主要事情是如何使客户端和服务器监听消息并同时发送它们。由于在服务器上执行socket:accept()时,它将暂停程序,
我看了一下ZMQ PUSH/PULL套接字,尽管我非常喜欢简单性(特别是与我现在正在通过UDP套接字在系统中实现的自定义碎片/ack相比),但我还是希望有自定义负载平衡功能,而不是幼稚的回合-robi
我正在编写一个应用程序,其中有多个 socket.io 自定义事件,并且所有工作正常,除了这个: socket.on("incomingImg", function(data) {
在我的应用程序中,我向服务器发送了两条小消息(类似 memcached 的服务)。在类似 Python 的伪代码中,这看起来像: sock.send("add some-key 0") ignored
很抱歉再次发布此问题,但大多数相关帖子都没有回答我的问题。我在使用 socket.io 的多个连接时遇到问题我没有使用“socket.socket.connect”方法,但我从第一次连接中得到了反馈。
我尝试使用 socket.io 客户端连接到非 socket.io websocket 服务器。但我做不到。我正在尝试像这样连接到套接字服务器: var socket = io.connect('ws
我遇到了一个奇怪的问题。在我非常基本的服务器中,我有: server.listen(8001); io.listen(server); var sockets = io.sockets; 不幸的是,套
我正在使用带套接字 io 的sailsjs。帆的版本是 0.10.5。我有以下套接字客户端进行测试: var socketIOClient = require('socket.io-client');
这个问题在这里已经有了答案: What is the fundamental difference between WebSockets and pure TCP? (4 个答案) 关闭 4 年前。
我是一名优秀的程序员,十分优秀!