多播windows下可以用,已经调通,然后移到Android的底层就是不行. 高手帮看看!
跟踪了几天,问题大概出在了模拟器的手机本地IP获取。换后得到的IP有点怪。IP转换函数:
static int st_comm_getIpAddr(char *ipaddr, size_t len)
{
int fd;
char buffer[COMM_ADDRSIZE];
struct ifreq ifr;
structsockaddr_in*addr;
if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0)
{
strncpy(ifr.ifr_name, COMM_ETHNAME, IFNAMSIZ);
ifr.ifr_name[IFNAMSIZ - 1] = '\0';
if (ioctl(fd, SIOCGIFADDR, &ifr) == 0)
{
addr = (struct sockaddr_in *)&(ifr.ifr_addr);
inet_ntop(AF_INET, &addr->sin_addr, buffer, 20);
}
else
{
close(fd);
return(-1);
}
}
else
{
return(-1);
}
if (strlen(buffer) > len-1)
{
return(-1);
}
strncpy(ipaddr, buffer, len);
close(fd);
return(0);
}
//get the host IP address
if(gethostname(hostname, 128) == 0 )
{
phost = gethostbyname(hostname);
paddr = inet_ntoa (*(struct in_addr *)phost->h_addr_list[0]);
strncpy(buffer,paddr,16);
}