各位老大,帮忙看看多播(multicast)的程序怎么收不到数据!

程序如下,我用端口精灵在windows下发送测试数据包,用以下程序在qnx下接收,却无论如何都收不到数据,windows下数据可以互通!
十万火急帮帮忙啊!
#define MAXBUF 256
#define PUERTO 1888
#define GRUPO “236.8.8.8”
#define MINE “192.168.0.17”

int main(void)
{
int s, n, r;
struct sockaddr_in srv, cli,mine;
struct ip_mreq mreq;
char buf[MAXBUF];
unsigned char ttl=32; /* range: 0 to 255, default = 1 */

bzero(&srv, sizeof(srv));
srv.sin_family = AF_INET;
srv.sin_port = htons(PUERTO);
if (inet_aton(GRUPO, &srv.sin_addr) < 0)
{
perror(“inet_aton”);
return 1;
}
bzero(&mine, sizeof(mine));
mine.sin_family = AF_INET;
mine.sin_port = htons(PUERTO);
if (inet_aton(MINE, &mine.sin_addr) < 0)
{
perror(“inet_aton”);
return 1;
}
if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror(“socket”);
return 1;
}
// if (bind(s, (struct sockaddr *)&srv, sizeof(srv)) < 0) {
if (bind(s, (struct sockaddr *)&mine, sizeof(mine)) < 0) {
perror(“bind”);
return 1;
}
setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
if (inet_aton(GRUPO, &mreq.imr_multiaddr) < 0) {
perror(“inet_aton”);
return 1;
}
if (inet_aton(MINE, &mreq.imr_interface) < 0) {
perror(“inet_aton”);
return 1;
}
// mreq.imr_interface.s_addr = htonl(INADDR_ANY);
if (setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq))< 0) {
perror(“setsockopt”);
return 1;
}
n = sizeof(cli);
while (1) {
usleep(1000000l);
printf(“test1”);
if ((r = recvfrom(s, buf, 15, 0, (struct sockaddr *)&srv, &n)) < 0) {
perror(“recvfrom”);
}
else {
buf[r] = 0;
fprintf(stdout, “Mensaje desde %s: %s”,inet_ntoa(cli.sin_addr), buf);
}
}
}

程序在这一句挂起,等不到数据!

if ((r = recvfrom(s, buf, 15, 0, (struct sockaddr *)&srv, &n)) < 0)

记得在QNX上加default route (route add default xx.xx.xx.xx)。如果还不行,把nicinfo, netstat -ni, netstat -nr的输出贴上来看看。