// 接收方程序 receivers.c
//#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#define BUFFSIZE 2048
#define RECV_IP_ADDR "224.8.8.1 "
#define DEST_PORT 8000
int main(int argc,char *argv[])
{
int sockfd;
int sock_reuse=1;
struct ip_mreq multicast;
struct sockaddr_in recver_addr;
char szError[100];
int index=0, iRecvLen; // Length of recv_sin
char szMessageA[1024*320]; // ASCII string
//TCHAR szMessageW[1024*320]; // Unicode string
char szMessageW[1024*320];
//启动SOCKET环境
WSADATA WSAData;
WORD wVersionRequested;
wVersionRequested=MAKEWORD(1,1);
if(WSAStartup(wVersionRequested,&WSAData)!=0)
{
printf( "recver:Initialize Winsock error! ");
exit(1);
}
if(LOBYTE(WSAData.wVersion)!=1||HIBYTE(WSAData.wVersion)!=1)
{
WSACleanup();
printf("setsockopt failed! Error: %d ",WSAGetLastError());
exit(1);
}
multicast.imr_multiaddr.s_addr=inet_addr(RECV_IP_ADDR); //宏RECV_IP_ADDR "224.8.8.1 "
multicast.imr_interface.s_addr=htonl(INADDR_ANY);
recver_addr.sin_family=AF_INET;
recver_addr.sin_port=htons(DEST_PORT);
recver_addr.sin_addr.s_addr=INADDR_ANY;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
//if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
//{
// printf( "recver:new a socket error!\n ");
// exit(1);
//}
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&sock_reuse,sizeof(sock_reuse));
//if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&sock_reuse,sizeof(sock_reuse))<0)
// {
// printf( "recver:socket options set error ");
// exit(1);
// }
bind(sockfd,(struct sockaddr *)&recver_addr,sizeof(recver_addr));
//if(bind(sockfd,(struct sockaddr *)&recver_addr,sizeof(recver_addr))<0)
// {
// closesocket(sockfd);
// printf( "recver:bind socket error!\n ");
// exit(1);
//}
setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&multicast,sizeof(multicast));
//if(setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&multicast,sizeof(multicast))<0)
// {
// sprintf(szError,TEXT( "setsockopt failed! Error:%d "),WSAGetLastError());
// printf( "%s\n ",szError);
// closesocket(sockfd);
// exit(1);
// }
printf( "这里是接收方:Receive on %s:%d\n ",RECV_IP_ADDR,DEST_PORT);
iRecvLen=sizeof(recver_addr);
memset(szMessageA,0,sizeof(szMessageA));
//Receive data from the multicasting group server.
if(recvfrom(sockfd,szMessageA,sizeof(szMessageA),0,(struct sockaddr FAR *)&recver_addr,&iRecvLen)
==SOCKET_ERROR)
{
sprintf(szError,TEXT( "recvfrom failed!Error: %d "),WSAGetLastError()); //wsprintf
MessageBox(NULL,szError,TEXT( "Error "),MB_OK);
//printf("%s",szError);
closesocket(sockfd);
return FALSE;
}
else
{
for(index=0;index<=sizeof(szMessageA);index++)
szMessageW[index]=szMessageA[index];
printf("收到组播数据%s",szMessageW);
//MessageBox(NULL,szMessageW,TEXT( "Info "),MB_OK);
}
//Disable receiving on Sock before closing it.
shutdown(sockfd,0x00); //CloseSock.
closesocket(sockfd);
WSACleanup();
while(1);
return 0;
}
computernetwork.rar_UDP组播
版权申诉
34 浏览量
2022-07-15
09:09:46
上传
评论
收藏 48KB RAR 举报
weixin_42651887
- 粉丝: 80
- 资源: 1万+
最新资源
- las格式点云数据使用详解(附VS编译好的LAStools工具)
- KRPano插件一键解密大师1.4.0 (解压密码1234)
- 《C++沉思录》是一本由 Scoot Meyers 所著的经典 C++ 编程书籍 该书深入探讨了 C++ 的一些高级概念和技术
- 海信刷机数据 LED42K310X3D(0000)BOM1-C006软件数据与LED42K310NX3D(0000)BOM1通用
- 送货单打印软件单机版直接单机运行不需要网络
- pycdc工具,Python3.9及以上可用的反编译工具(exe转py)
- 计算机网络基础练习题.pdf
- SDIO接口远距离无线图传WIFI6模块TT-S6D2TR-105HP
- 海信智能电视刷机数据 LED42K280J3D(1000) 生产用软件数据 务必确认机编一致 强制刷机 整机USB升级程序
- 步进电机控制实验-原理图-软件代码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈