#include "struct.h"
//int datalen;
struct sockaddr_in localSock;
struct ip_mreq group;
int GetSOCK_DGRAM(unsigned short port)
{
int sd = socket(AF_INET, SOCK_DGRAM, 0);
if(sd < 0){
perror("Opening datagram socket error");
exit(1);
} else
printf("Opening datagram socket....OK.\n");
{
int reuse = 1;
if(setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0){
perror("Setting SO_REUSEADDR error");
close(sd);
exit(1);
} else
printf("Setting SO_REUSEADDR...OK.\n");
}
int ret = 0;
memset((char *) &localSock, 0, sizeof(localSock));
localSock.sin_family = AF_INET;
localSock.sin_port = port;
localSock.sin_addr.s_addr = INADDR_ANY;
if(bind(sd, (struct sockaddr*)&localSock, sizeof(localSock))){
perror("Binding datagram socket error");
close(sd);
exit(1);
} else
{
printf("Binding datagram socket...OK.\n");
}
//setsockopt(sd,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
group.imr_multiaddr.s_addr = inet_addr(GROUP_IP);//相当于组名
group.imr_interface.s_addr = inet_addr(LOCAL_IP);//自己的ip
if(setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group, sizeof(group)) < 0){
perror("Adding multicast group error");
close(sd);
exit(1);
} else
printf("Adding multicast group...OK.\n");
//datalen = recvSize;
return sd;
}
int InitSocket()
{
#ifdef WIN32
int Error;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);
Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
if(Error!=0)
{
return 0;
}
else
{
if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
{
WSACleanup();
return 0;
}
}
#endif
return 0;
}
int main(int argc, char *argv[])
{
printf("UdeClientStart().group=%s,port=%d,locol=%s,build=%s\n", GROUP_IP, PORT, LOCAL_IP, __TIME__);
InitSocket();
int sd = GetSOCK_DGRAM(htons(PORT));
struct sockaddr_in from;
int fromlen = sizeof(from);
int nRecvLen = 1;
const int FILE_LEN = 1024*10;
//char* bufWrite = new char[FILE_LEN];
const int recvSize = 1024*1000;
unsigned char* databuf = new unsigned char[recvSize];
int nLastSeq = 0;
static double s_nRecvTotal = 0.0;
int lostPacke = 0;
int lostTimes = 0;
while(1)//nRecvLen > 0
{
nRecvLen = recvfrom(sd, (char*)databuf, recvSize, 0, (struct sockaddr*)&from, (socklen_t*)&fromlen) ;//read
if (nRecvLen > 0)
{
// continue;
}
printf("recv=%s\n", databuf);
}
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
C++ UDP组播编程例子
共33个文件
pdb:4个
sh:3个
dsp:2个
需积分: 37 22 下载量 91 浏览量
2017-10-08
11:14:30
上传
评论
收藏 3.01MB RAR 举报
温馨提示
C++ UDP组播编程例子 DemoUDPMulticast C++ UDP组播编程例子 DemoUDPMulticast
资源推荐
资源详情
资源评论
收起资源包目录
DemoUDPMulticast.rar (33个子文件)
DemoUDPMulticast
struct.h 570B
6410build.sh 112B
build.sh 75B
3500build.sh 126B
DemoMulticast.ncb 41KB
Debug
vc60.pdb 76KB
udpClientDemo.pdb 513KB
vc60.idb 145KB
udpClientDemo.pch 4.36MB
udpClientDemo.ilk 194KB
udpClientDemo.exe 168KB
udpClientDemo.sbr 0B
udpClientDemo.bsc 1.84MB
udpClientDemo.obj 16KB
DemoMulticast.opt 58KB
udpClientDemo.opt 59KB
udpServerDemo
struct.h 0B
udpServerDemo.dsp 4KB
Debug
vc60.pdb 76KB
udpServerDemo.ilk 190KB
udpServerDemo.exe 168KB
vc60.idb 153KB
udpServerDemo.pch 3.49MB
udpServerDemo.obj 14KB
udpServerDemo.pdb 513KB
udpServerDemo.plg 260B
udpServerDemo.cpp 2KB
udpClientDemo.cpp 3KB
udpClientDemo.ncb 57KB
udpClientDemo.plg 1KB
DemoMulticast.dsw 764B
udpClientDemo.dsp 3KB
out 19KB
共 33 条
- 1
资源评论
hlwyrdrj
- 粉丝: 3
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功