首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

程序为啥接收不到组播的消息?recvfrom一直不返回

2013-09-05 
程序为什么接收不到组播的消息?recvfrom一直不返回#include stdio.h#include winsock2.h#pragma comme

程序为什么接收不到组播的消息?recvfrom一直不返回

#include <stdio.h>
#include <winsock2.h>

#pragma comment( lib, "ws2_32.lib")

int main()
{
    WSADATA  wsadata;
SOCKET  Socket, socket;
SOCKADDR_IN  from, to;

    WSAStartup( 0x0202, &wsadata );

    printf("初始化完毕!\n");
Socket = WSASocket( AF_INET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_MULTIPOINT_D_LEAF|WSA_FLAG_MULTIPOINT_C_LEAF
|WSA_FLAG_OVERLAPPED);


if( !Socket )
{
printf( "创建socket失败: %d\n", WSAGetLastError() );
return 0;
}
    printf("socket建立\n");

from.sin_family = AF_INET;
from.sin_port   = htons( 1000 );
 from.sin_addr.S_un.S_addr  = htonl(INADDR_ANY);

to.sin_family   = AF_INET;
to.sin_port     = htons( 4804 );
to.sin_addr.S_un.S_addr = inet_addr( "224.40.40.40" );

if( bind( Socket, (SOCKADDR*)&from, sizeof(from) ) == SOCKET_ERROR )
{
printf( "bind失败: %d\n", WSAGetLastError() );
return 0;
}
    printf("bind完成\n");

if( ( socket = WSAJoinLeaf( Socket, (SOCKADDR*)&to,sizeof(to),NULL,NULL,NULL,NULL, JL_BOTH)) == SOCKET_ERROR )
{
printf("WSAJoinLeaf()失败: %d\n",WSAGetLastError());
closesocket(Socket);
WSACleanup();
return 0;
}
printf("joinleaf\n");

while( 1 )
{
char  recvbuffer[100];
int   value = 0;
        int   len = sizeof(to);

memset( recvbuffer, 0, 100);
    value = recvfrom( socket, recvbuffer, 100, 0, (struct sockaddr*)&to, &len);

        printf("value = %d\n",value);
        printf( "%s\n", recvbuffer );
}

closesocket(Socket);
closesocket(socket);
WSACleanup();
return 0;
}

通过拦包发现,明明有向224.40.40.40:4804发送了数据,可是程序为啥收不到?求指点 组播 VC++ winsock2 网络编程

recvfrom不返回
[解决办法]
本帖最后由 VisualEleven 于 2013-08-22 17:26:45 编辑 value = recvfrom( socket, recvbuffer, 100, 0, (struct sockaddr*)&to, &len);
SOCKET写错了,应该是Socket吧
value = recvfrom( Socket, recvbuffer, 100, 0, (struct sockaddr*)&to, &len);
[解决办法]
怎么搞了两个不一样的端口

热点排行