|
最近在做一个组播通讯的程序。我在有一个网卡的学习板上编写了程序,并且可以在PC上获得该网卡发出的数据,但是我将程序下载到有双网卡的板子上运行就会出现不能接收的问题。而后我在双网卡的板子上进行了单播和广播的测试,PC均能收到数据,唯独组播不行,请问组播程序是否有特别需要注意的地方,我用的是VxWorks6.7。
我的发送程序大致如下:
//建立一个Socket
if((nsendSkt = socket(AF_INET,SOCK_DGRAM,0)) == ERROR){
perror("netInitSend : can not open send socket\n");
return;
}
//配置本机的参数
sockAddrSize = sizeof(struct sockaddr_in);
memset((char*)&myAddr, 0, sockAddrSize);
myAddr.sin_family = AF_INET;
myAddr.sin_port = htons(LOCAL_CLIENT_PORT);
myAddr.sin_addr.s_addr = htonl(INADDR_ANY);
//配置目标机的参数,目标的IP地址设置为组播地址
memset((char*)&peerAddr, 0, sockAddrSize);
peerAddr.sin_family = AF_INET;
peerAddr.sin_port = htons(LOCAL_SERVER_PORT);
peerAddr.sin_addr.s_addr = inet_addr(MULTICASTADDR); //MULTICASTADDR = "224.0.9.22"
//setsockopt的参数设置
if_req.s_addr = myAddr.sin_addr.s_addr;
if( setsockopt( nsendSkt, IPPROTO_IP, IP_MULTICAST_IF, (char*)&if_req, sizeof(struct in_addr) ) < 0 ){
perror("setsockopt:IP_MULTICAST_IF");
return;
}
if( setsockopt( nsendSkt, IPPROTO_IP, IP_MULTICAST_LOOP, (char*)&optval, sizeof(int) ) < 0 ){
perror("setsockopt:IP_MULTICAST_LOOP");
return;
}
if (setsockopt( nsendSkt, SOL_SOCKET, SO_REUSEADDR,
(char*)&optval, sizeof(optval)) == ERROR) {
perror("setsockopt(SO_REUSEADDR)");
return;
}
//发送程序,如果出错会提示,否则打印发送的内容
if((sendLen = sendto(nsendSkt,
pBuf,
sendLen,0,
(struct sockaddr*)&peerAddr,
sizeof(struct sockaddr)))== ERROR){
perror("sendto error!!!\n");
continue;
}
else
printf("Send %d characters\n",sendLen);
}
如果在双网卡的板子上运行,PC接收不到数据,sendto也未提示出错。请各位高手帮我看看,指点指点,谢谢。
|
|