• 7077阅读
  • 1回复

[提问]做过qt组播的请进! [复制链接]

上一主题 下一主题
离线goku_b
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-31
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));
我这里没有办法加入组播
只能给其他参数!!
不知道为什么!








离线i4455

只看该作者 1楼 发表于: 2012-04-11
现在弄好了吗 我正找这方面的东西呢 能提供下帮助吗
快速回复
限100 字节
 
上一个 下一个