bool MainWindow::initSocket()
{
// unsigned long
FSocket =socket(AF_INET, SOCK_DGRAM, 0/*PF_INET,SOCK_DGRAM,IPPROTO_IP*/);
unsigned char TTL = 16;
// bool Loop = true;
struct ip_mreq imreq;
//memset(&imreq,0,sizeof(imreq));
imreq.imr_multiaddr.S_un.S_addr = inet_addr("224.1.1.1");
imreq.imr_interface.S_un.S_addr = /*inet_addr("192.168.123.31");//*/htonl(INADDR_ANY);
//imreq.imr_interface.s_addr = inet_addr("224.1.1.1");
//imreq.imr_multiaddr.s_addr=/*inet_addr("192.168.123.31")//*/htonl(INADDR_ANY);
int rr=setsockopt(FSocket, SOL_SOCKET, IP_ADD_MEMBERSHIP,(char*)&imreq,sizeof(ip_mreq));
// if(rr==-1)
// /*;//*/ return false;
struct sockaddr_in FAddr;
memset(&FAddr,0,sizeof(FAddr));
FAddr.sin_family = AF_INET;
FAddr.sin_addr.S_un.S_addr=/*inet_addr("224.1.1.1");//*/htonl(INADDR_ANY);
FAddr.sin_port = /*9000;//*/htons(9000);
int rrE=bind(FSocket,(sockaddr*)&FAddr,sizeof(FSocket));
if(rrE== -1)
return false;
//FAddr.sin_zero
// if(setsockopt(FSocket,IPPROTO_IP,IP_ADD_MEMBERSHIP,(CHAR*)&TTL,sizeof(imreq))==-1)
// /*;//*/ return false;
// if(setsockopt(FSocket,IPPROTO_IP,IP_ADD_MEMBERSHIP,(CHAR*)&Loop,sizeof(imreq))==-1)
// /*;//*/return false;
else
{
g_udpsock = new QUdpSocket();
g_udpsock->setSocketDescriptor(FSocket);
connect(g_udpsock,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams()));
//p_timer->start(1000);
return true;
}
return false;
}
//int rr=setsockopt(FSocket, SOL_SOCKET, IP_ADD_MEMBERSHIP,(char*)&imreq,sizeof(ip_mreq));
我这里没有办法加入组播
只能给其他参数!!
不知道为什么!