|
vxworks 组播不能接收数据,在线等....
[复制链接]
代码如下:
struct sockaddr_in addrHost;
struct sockaddr_in addrFrom;
ULONG l;
SOCKET s ;
fd_set ReadSet ;
struct ip_mreq mcast;
int width = 0 ;
struct timeval timeOut ;
char netReceiveBuf[NET_BUF] ;
ULONG sourceIp ;
USHORT sourcePort ;
char sendBuf[]= "this is a test" ;
int addrSize = sizeof(addrFrom) ;
s = socket(AF_INET, SOCK_DGRAM, 0);
if(s == ERROR)
return ;
timeOut.tv_sec = 10 ;
timeOut.tv_usec = 0 ;
memset(&addrHost, 0, sizeof(struct sockaddr_in));
addrHost.sin_family = AF_INET;
addrHost.sin_port = htons(7777);
addrHost.sin_addr.s_addr = inet_addr("192.100.89.185");
if(bind(s, (struct sockaddr*)(&addrHost), sizeof(addrHost)) < 0)
{
close(s) ;
return ;
}
mcast.imr_multiaddr.s_addr = inet_addr("224.1.0.1");
mcast.imr_interface.s_addr = inet_addr("192.100.89.185");
if (setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *)&mcast, sizeof(mcast)) == ERROR)
{
printf("setsockopt(IP_ADD_MEMBERSHIP) failed:n");
close(s);
return ;
}
FD_ZERO(&ReadSet) ;
FD_SET(s , &ReadSet) ;
width = s ;
width++ ;
if (select(width , &ReadSet , NULL , NULL , &timeOut) == 0)
{
perror("Ssmr_CarCommunication:select timeOut , carNet error. \n");
close(s);
return ;
}
memset(netReceiveBuf , 0 , NET_BUF) ;
if (FD_ISSET(s , &ReadSet))
{
recvfrom(s, netReceiveBuf , NET_BUF , 0 , (struct sockaddr *)&addrFrom , &addrSize) ;
}
if (setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP,
(char *)&mcast, sizeof(mcast)) == ERROR)
{
printf("setsockopt(IP_ADD_MEMBERSHIP) failed:n");
close(s);
}
close(s) ;
程序运行到select时就停止,等待timeOut之后就返回。说明socket没有接收到数据。请问vxworks组播接收数据还要进行什么设置??
另,利用此socket可以发送数据到组播地址。
谢谢。
|
|