socket 组播 求救!!!(40分)
大家看看我这段代码哪里有问题,怎么从组播网里收不到数据呢?哪里出现问题了!!??大家帮忙看看(这是客户端)
void main(void)
{
WSADATA wwsd;
SOCKADDR_IN local;
SOCKADDR_IN from;
ip_mreq mcast;
SOCKET sockM;
char recvbuf[BUFSIZE];
int len= sizeof(SOCKADDR_IN);
int optval;
int ret;
//启动服务
if(WSAStartup(MAKEWORD(1,1),&wwsd)!=0)
{
cout<<"WSAStartUp failed"<<endl;
return;
}
//创建套节字
if((sockM=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)
{
cout<<"sockey failed"<<endl;
WSACleanup();
return;
}
BOOL bMultipleApps = TRUE; /* allow reuse of local port if needed */
if(setsockopt(sockM, SOL_SOCKET,SO_REUSEADDR, (char *)&bMultipleApps, sizeof(BOOL))==SOCKET_ERROR)
{
cout<<"setsockopt(SO_REUSEADDR) failed"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
//设定数据传送时间
optval=8;
if(setsockopt(sockM,IPPROTO_IP,IP_MULTICAST_TTL,(char FAR *)&optval,sizeof(int))==SOCKET_ERROR)
{
cout<<"setsockopt (IP_MULTICAST_TTL) failed"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
bLoopBack=FALSE;
if(bLoopBack)//设定回传
{
optval=0;
if(setsockopt(sockM,IPPROTO_IP,IP_MULTICAST_LOOP,(char FAR*)&optval,sizeof(optval))==SOCKET_ERROR)
{
cout<<"setsockopt(IP_MULTICAST_LOOP) failed"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
}
local.sin_family=AF_INET;
local.sin_port =htons(5000);
local.sin_addr.s_addr =htonl(INADDR_ANY);
//邦定本地端口
if(bind(sockM,(SOCKADDR *)&local,sizeof(local))==SOCKET_ERROR)
{
cout<<"bind failed"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
mcast.imr_multiaddr.s_addr=inet_addr("234.5.6.7"); //多播组地址
mcast.imr_interface.s_addr=htonl(INADDR_ANY); //本地地址
//加入组播组
if(setsockopt(sockM,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char FAR *)&mcast,sizeof(mcast))==SOCKET_ERROR)
{
cout<<"setsockopt(IP_ADD_MEMBERSHIP) failed!"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
dwCount=4;
bSender=false;
//接收数据
if(!bSender)
{
//Receive some data
//
for(i=0;i<dwCount;i++)
{
if((ret=recvfrom(sockM,recvbuf,BUFSIZE,0,(SOCKADDR *)&from, &len))==SOCKET_ERROR)
{
cout<<"recvfrom failed!"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
recvbuf[ret]=0;
cout<<"Recv:"<<recvbuf<<" from"<<inet_ntoa(from.sin_addr);
}
}
//Drop group membership
//离开组播组
if(setsockopt(sockM,IPPROTO_IP,IP_DROP_MEMBERSHIP,(char *)&mcast,sizeof(mcast))==SOCKET_ERROR)
{
cout<<"setsockopt(IP_DROP_MEMBERSHIP) failed"<<endl;
}
//关闭注销套节字
closesocket(sockM);
//关闭服务
WSACleanup();
return;
}
void main(void)
{
WSADATA wwsd;
SOCKADDR_IN local;
SOCKADDR_IN from;
ip_mreq mcast;
SOCKET sockM;
char recvbuf[BUFSIZE];
int len= sizeof(SOCKADDR_IN);
int optval;
int ret;
//启动服务
if(WSAStartup(MAKEWORD(1,1),&wwsd)!=0)
{
cout<<"WSAStartUp failed"<<endl;
return;
}
//创建套节字
if((sockM=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)
{
cout<<"sockey failed"<<endl;
WSACleanup();
return;
}
BOOL bMultipleApps = TRUE; /* allow reuse of local port if needed */
if(setsockopt(sockM, SOL_SOCKET,SO_REUSEADDR, (char *)&bMultipleApps, sizeof(BOOL))==SOCKET_ERROR)
{
cout<<"setsockopt(SO_REUSEADDR) failed"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
//设定数据传送时间
optval=8;
if(setsockopt(sockM,IPPROTO_IP,IP_MULTICAST_TTL,(char FAR *)&optval,sizeof(int))==SOCKET_ERROR)
{
cout<<"setsockopt (IP_MULTICAST_TTL) failed"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
bLoopBack=FALSE;
if(bLoopBack)//设定回传
{
optval=0;
if(setsockopt(sockM,IPPROTO_IP,IP_MULTICAST_LOOP,(char FAR*)&optval,sizeof(optval))==SOCKET_ERROR)
{
cout<<"setsockopt(IP_MULTICAST_LOOP) failed"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
}
local.sin_family=AF_INET;
local.sin_port =htons(5000);
local.sin_addr.s_addr =htonl(INADDR_ANY);
//邦定本地端口
if(bind(sockM,(SOCKADDR *)&local,sizeof(local))==SOCKET_ERROR)
{
cout<<"bind failed"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
mcast.imr_multiaddr.s_addr=inet_addr("234.5.6.7"); //多播组地址
mcast.imr_interface.s_addr=htonl(INADDR_ANY); //本地地址
//加入组播组
if(setsockopt(sockM,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char FAR *)&mcast,sizeof(mcast))==SOCKET_ERROR)
{
cout<<"setsockopt(IP_ADD_MEMBERSHIP) failed!"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
dwCount=4;
bSender=false;
//接收数据
if(!bSender)
{
//Receive some data
//
for(i=0;i<dwCount;i++)
{
if((ret=recvfrom(sockM,recvbuf,BUFSIZE,0,(SOCKADDR *)&from, &len))==SOCKET_ERROR)
{
cout<<"recvfrom failed!"<<endl;
closesocket(sockM);
WSACleanup();
return;
}
recvbuf[ret]=0;
cout<<"Recv:"<<recvbuf<<" from"<<inet_ntoa(from.sin_addr);
}
}
//Drop group membership
//离开组播组
if(setsockopt(sockM,IPPROTO_IP,IP_DROP_MEMBERSHIP,(char *)&mcast,sizeof(mcast))==SOCKET_ERROR)
{
cout<<"setsockopt(IP_DROP_MEMBERSHIP) failed"<<endl;
}
//关闭注销套节字
closesocket(sockM);
//关闭服务
WSACleanup();
return;
}
...全文
相关推荐
手机微商城的微信小程序页面模板源码下载.zip
手机微商城的微信小程序页面模板源码下载.zip
微商城小程序 前台+后台 源码
非常好用的微信商城小程序,带源码,前后台都可以使用,欢迎大家下载。
小米微商城的微信小程序模板源码下载.zip
小米微商城的微信小程序模板源码下载.zip
weui开发整套移动端微商城模板源码.zip
weui开发整套移动端微商城模板源码.zip是一款基于weui框架开发的电商模板 功能:首页,分类,购物车,个人中心 weui基本组件功能都已经实现
微信小程序微商城源码.zip
不错的微信小程序商城源码,可以根据自己的情况修改,没有后台程序, 不错的微信小程序商城源码,可以根据自己的情况修改,没有后台程序,


