主题:帮我看看下面的多播程序 错在哪里
#pragma comment(lib,"ws2_32.lib")
#include <STDIO.h>
#include <WINSOCK2.H>
#include <WS2tcpip.h>
void HandleError(char *);
int main(int argc,char *argv[])
{
WSAData wsaData;
WSAStartup(WINSOCK_VERSION,&wsaData);
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_addr.s_addr=inet_addr("192.168.1.101");
addr.sin_family=AF_INET;
addr.sin_port=htons(9999);
SOCKET sock=socket(AF_INET,SOCK_DGRAM,0);
if(bind(sock,(struct sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR){
printf("bind:%d\n",WSAGetLastError());
}
struct in_addr mcaddr;
mcaddr.s_addr=inet_addr("226.1.2.3");
if(mc_join(sock,&mcaddr,&(addr.sin_addr))==SOCKET_ERROR){
printf("Join Multcast Group:%d\n",WSAGetLastError());}
char buf[65];
if(recvfrom(sock,buf,64,0,NULL,NULL)==SOCKET_ERROR){
printf("recvfrom:%d\n",WSAGetLastError());
break;
}
else
printf("recvd:%s\n",buf);
}
void HandleError(char *func)
{
int errCode=WSAGetLastError();
char info[65]={0};
_snprintf(info,64,"%s:%d\n",func,errCode);
printf(info);
}
int mc_join(SOCKET s,struct in_addr *mcaddr,struct in_addr *local_if)
{//mcaddr 多播地址,local_if欲加入多播组的本地IP地址
struct ip_mreq mreq;//IP_ADDR_MEMBERSHIP选项值
memcpy(&(mreq.imr_interface),local_if,sizeof(struct in_addr));
memcpy(&(mreq.imr_multiaddr),mcaddr,sizeof(struct in_addr));
return(setsockopt(s,IPPROTO_IP ,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq)));
}
#include <STDIO.h>
#include <WINSOCK2.H>
#include <WS2tcpip.h>
void HandleError(char *);
int main(int argc,char *argv[])
{
WSAData wsaData;
WSAStartup(WINSOCK_VERSION,&wsaData);
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_addr.s_addr=inet_addr("192.168.1.101");
addr.sin_family=AF_INET;
addr.sin_port=htons(9999);
SOCKET sock=socket(AF_INET,SOCK_DGRAM,0);
if(bind(sock,(struct sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR){
printf("bind:%d\n",WSAGetLastError());
}
struct in_addr mcaddr;
mcaddr.s_addr=inet_addr("226.1.2.3");
if(mc_join(sock,&mcaddr,&(addr.sin_addr))==SOCKET_ERROR){
printf("Join Multcast Group:%d\n",WSAGetLastError());}
char buf[65];
if(recvfrom(sock,buf,64,0,NULL,NULL)==SOCKET_ERROR){
printf("recvfrom:%d\n",WSAGetLastError());
break;
}
else
printf("recvd:%s\n",buf);
}
void HandleError(char *func)
{
int errCode=WSAGetLastError();
char info[65]={0};
_snprintf(info,64,"%s:%d\n",func,errCode);
printf(info);
}
int mc_join(SOCKET s,struct in_addr *mcaddr,struct in_addr *local_if)
{//mcaddr 多播地址,local_if欲加入多播组的本地IP地址
struct ip_mreq mreq;//IP_ADDR_MEMBERSHIP选项值
memcpy(&(mreq.imr_interface),local_if,sizeof(struct in_addr));
memcpy(&(mreq.imr_multiaddr),mcaddr,sizeof(struct in_addr));
return(setsockopt(s,IPPROTO_IP ,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq)));
}