组播通信的问题

xengine-qyt 2018-05-07 10:55:02
在同一台电脑下测试运行发送端和接收端都是正常的,组播通信正常
在不同电脑下收不到数据
这是为何?我抓包看数据是发送出去了,接收端网卡也收到了,但是应用程序为何收不到?我检查防火墙也没问题啊,都关闭了的.调试查看ip和端口参数都是正常的.

接收端代码如下:


st_DDSClient.m_hSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (SOCKET_ERROR == st_DDSClient.m_hSocket)
{
return FALSE;
}
BOOL bReuse = TRUE;
if (SOCKET_ERROR == setsockopt(st_DDSClient.m_hSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&bReuse, sizeof(BOOL)))
{
return FALSE;
}
int nLoop = 1;
if (SOCKET_ERROR == setsockopt(st_DDSClient.m_hSocket, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&nLoop, sizeof(nLoop)))
{
DDS_IsErrorOccur = TRUE;
DDS_dwErrorCode = ERROR_HMC_NETENGINE_DDS_SUBSCRIBE_CREATEREAD_LOOP;
return FALSE;
}
st_DDSClient.st_SockAddr.sin_family = AF_INET;
st_DDSClient.st_SockAddr.sin_port = htons(st_DDSClient.st_DDSPublish.nPort);
st_DDSClient.st_SockAddr.sin_addr.s_addr = INADDR_ANY;
if (SOCKET_ERROR == bind(st_DDSClient.m_hSocket, (sockaddr *)&st_DDSClient.st_SockAddr, sizeof(st_DDSClient.st_SockAddr)))
{
return FALSE;
}
ip_mreq st_IPCast;
st_IPCast.imr_interface.s_addr = INADDR_ANY;
st_IPCast.imr_multiaddr.s_addr = inet_addr(st_DDSClient.st_DDSPublish.tszDDSAddr);
if (SOCKET_ERROR == setsockopt(st_DDSClient.m_hSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&st_IPCast, sizeof(st_IPCast)))
{
return FALSE;
}

recvfrom(st_DDSClient.m_hSocket, tszMsgBuffer, nRecvLen, 0, (sockaddr *)&st_RecvAddr, &nSize);//一直卡在这里,不动了

...全文
953 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2018-05-11
  • 打赏
  • 举报
回复
查下发送端的代码

int n = 0; // 此处的n值很重要
setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&n, sizeof(n));
n为零表示发送端和接收端必须位于同一机器上; 如果n为1, 那么发送端和接收端就可以位于不同机器上了, 只需要他们位于同一个子网内即可。
赵4老师 2018-05-08
  • 打赏
  • 举报
回复
重启电脑再试试看。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧