程序为什么接收不到组播的消息?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;
}
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);
[解决办法]
怎么搞了两个不一样的端口