2010-12-14 14 views
2

win XPでIPの範囲に何かマルチキャストしようとしていますが、正常に動作しますが、Win VIstaで同じアプリケーションを実行しているときにマルチキャストできません。 Win Vitsaの発行元情報を設定または追加する必要がありますか?Windows Vistaでマルチキャストが動作しない

編集:

struct sockaddr_in staddr; 
    memset(&staddr, 0, sizeof(struct sockaddr_in)); 
    staddr.sin_family = AF_INET; 
    staddr.sin_port = htons(SSDP_PORT); // Use the first free port 
    staddr.sin_addr.s_addr=inet_addr(SSDP_MULTICAST_ADDRESS); 

    int socklen = sizeof(struct sockaddr_in); 

編集2

Socket Creation 
int ibindstatus =0 ; 
    try 
    { 
    //Initailize the WinSock 
    WSADATA wsaData; 
    WSAStartup(MAKEWORD(2,2), &wsaData); 

    struct in_addr iaddr; 
    struct sockaddr_in staddr; 
    // set content of struct saddr and imreq to zero 
    memset(&staddr, 0, sizeof(struct sockaddr_in)); 
    memset(&iaddr, 0, sizeof(struct in_addr)); 

    // open a UDP socket 

    m_iSocket = socket(AF_INET, SOCK_DGRAM, 0); 
    if (m_iSocket < 0)  
    {  
     return SOCKET_NOT_AVAILABLE; 
    } 

    staddr.sin_family = AF_INET; 
    staddr.sin_port = htons(SSDP_PORT); // Use the first free port 
    staddr.sin_addr.s_addr = htonl(INADDR_ANY); // bind socket to any interface 

    ibindstatus = bind(m_iSocket, (struct sockaddr *)&staddr, sizeof(struct sockaddr_in)); 
    if (ibindstatus < 0) 
    { 
     return SOCKET_BIND_ERROR; 
    } 


    //send the buffer 
    int iSendStatus = sendto(m_iSocket, cSendData, lSendDataLen, 0, 
        (struct sockaddr *)&staddr, socklen); 
    if(iSendStatus< 0) 
    { 
     return SEND_ERROR;  
    } 
+1

コードを投稿してください。 – Simone

+0

@Simone、コード – Simsons

+0

で更新してください。最初にWiresharkで確認してください。間違ったアダプタを使用している可能性があります。 –

答えて

0

まあ実験のlotz後、私は、マルチキャスティングが働いていなかった理由を把握することができませんでした、と突然、これを見つけましたなぜなら、ネットワークディスカバリーが私のVistaではオフになっていたからです。だから私は何をしたかここにいる場合

コントロールパネルに行く - >[ネットワークとインターネット)を共有するセットアップファイル] - > [共有と探索、その後に切り替えたりネットワーク検出オフ

私のアプリケーションとソースコードは、自分の質問に投稿したものです。完全にこれがあなたの時間とフラストレーションのいくつかを救うことを願っています。