首页 udp广播发送数据

udp广播发送数据

举报
开通vip

udp广播发送数据udp广播发送数据 //server #include ; #include ; #include ; #include ; #include ; #include ; #include ; #include ; #include ; int Udp_Init(char *local_ip,unsigned short local_port,char *goal_ip,unsigned short goal_port,struct sockaddr_in *sendaddr,int fla...

udp广播发送数据
udp广播发送数据 //server #include <;stdio.h>; #include <;sys/types.h>; #include <;sys/socket.h>; #include <;stdlib.h>; #include <;errno.h>; #include <;string.h>; #include <;unistd.h>; #include <;netinet/in.h>; #include <;fcntl.h>; int Udp_Init(char *local_ip,unsigned short local_port,char *goal_ip,unsigned short goal_port,struct sockaddr_in *sendaddr,int flag) { int i,sockfd,Broadcast; struct sockaddr_in local_addr; sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd==-1) { close(sockfd); #ifndef DAMEON printf( ";socket creat error\n ";); #else syslog(LOG_ERR, ";UDP SOCKET Create error\n ";); #endif return -1; } memset(&;local_addr,0,sizeof(struct sockaddr)); local_addr.sin_family=AF_INET; local_addr.sin_addr.s_addr=inet_addr(local_ip); local_addr.sin_port=htons(local_port); if(bind(sockfd,(struct sockaddr *)&;(local_addr),sizeof(struct sockaddr))==-1) { close(sockfd); printf( "; %s\n ";,local_ip); #ifdef DAMEON syslog(LOG_ERR, ";UDP BIND\n ";); #else printf( ";bind error\n ";); #endif return sockfd; } //ÅÐ?ÏÌ×?Ó×ÖµÄ????ÊÇ?ñΪ?Ç×èÈû??Ê? if(flag>; 0){ if( (flag=fcntl(sockfd,F_SETFL,0)) <; 0) #ifndef DAMEON printf( ";fcntl error\n ";); #endif flag |=O_NONBLOCK; if( fcntl(sockfd,F_SETFL,flag) <; 0) #ifndef DAMEON printf( ";fcntl nonblock error\n ";); #endif } if( goal_ip != NULL ){ memset(sendaddr,0,sizeof(struct sockaddr)); sendaddr->; sin_family=AF_INET; sendaddr->; sin_addr.s_addr=inet_addr(goal_ip); sendaddr->; sin_port=htons(goal_port); //ÅÐ?Ï??ËÍIPÊÇ?ñΪ?ã??IP if( (sendaddr->;sin_addr.s_addr >;>; 24) == 0xff) { int Broadcast=1; sendaddr->; sin_addr.s_addr = htonl(INADDR_BROADCAST); if( setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,(const char *)&;(Broadcast),sizeof(int)) == -1) { close(sockfd); #ifdef DAMEON syslog(LOG_ERR, ";UDP BROADCAST SET error\n ";); #else printf( "; broadcast setup error\n ";); #endif return -1; } } printf(";set sockfd broadcast ok\n";); } printf(";sockfd init ok\n";); return sockfd; } int main(int argc, char ** argv) { struct sockaddr_in sendaddr; int sock_fd; int count=100; int rec; if( argc <;3 ){ printf(";usage error input local IP to IP\n";); return ; } if( (sock_fd=Udp_Init(argv[1],9001,argv[2],9001,&;sendaddr,0) ) == -1) { perror(";udp_init error";); } sleep(1); printf(";socket:%d\n";,sock_fd); while( count-- ){ rec=0; rec=sendto(sock_fd, ";hello";,5, 0, (struct sockaddr*)&;sendaddr, sizeof(struct sockaddr_in)); printf(";sendto len:%d\n";,rec); rec=0; usleep(100); } } //client #include <;stdio.h>; #include <;sys/types.h>; #include <;sys/socket.h>; #include <;stdlib.h>; #include <;errno.h>; #include <;string.h>; #include <;unistd.h>; #include <;netinet/in.h>; #include <;fcntl.h>; #include <;assert.h>; //======================================================== static int sock_fd; //======================================================== //name:int udpc_init(void *p) //args:void *p //retu: //func: //======================================================== int udpc_init(void *p){ int nSize,fBroadcast,count=1; int port=*(int*)p; struct sockaddr_in Local_rec_addr; nSize = sizeof(struct sockaddr); if( ( sock_fd = socket(AF_INET,SOCK_DGRAM,0) ) <; 0 ){ perror(";socket error";); return -1; } memset(&;Local_rec_addr,0,sizeof(Local_rec_addr)); Local_rec_addr.sin_family=AF_INET; Local_rec_addr.sin_port = htons(port); int Broadcast=1; if( setsockopt(sock_fd,SOL_SOCKET,SO_BROADCAST,(const char *)&;(Broadcast),sizeof(int)) == -1){ perror(";setsockopt error";); } int flag=0; if(flag >; 0){ if((flag = fcntl(sock_fd,F_SETFL,0)) <; 0 ) #ifndef DAMEON perror( ";fcntl error\n ";); #endif flag |= O_NONBLOCK; if(fcntl(sock_fd,F_SETFL,flag) <; 0 ) #ifndef DAMEON perror( ";fcntl nonblock error\n ";); #endif } if( bind(sock_fd,(struct sockaddr *)&;Local_rec_addr,sizeof(Local_rec_addr)) == -1){ perror(";bind error";); return -1; }; return sock_fd; } //======================================================== //name:int udpc_getdata(char *buff, int max) //args:char *, int //retu:the lenof recevd data. //func: //======================================================== int udpc_getdata(char *buff, int max){ printf(";sock_fd:%d\n";,sock_fd); assert(buff != NULL); char *buffp=buff; int count=max; int tmp; struct sockaddr_in Remote_rec_addr; int nSize = sizeof(struct sockaddr); while(count >;0) { tmp= recvfrom(sock_fd,buffp,count, 0,(struct sockaddr *)&;(Remote_rec_addr), &;nSize) ; if(tmp <; 0 ){ perror(";recvfrom error";); break; } printf( "; %s:%d\n ";,buffp,tmp); buffp +=tmp; count -=tmp; } return max-count; } //======================================================== //name:int udpc_fina() //args: //retu: //func: //======================================================== int udpc_fina(){ close(sock_fd); } int main(int argc , char ** argv) { char buff[2000]; int recvlen; int udp_port=9001; memset((char *)buff, 0 , sizeof(buff)); if( udpc_init(&;udp_port) == -1){ perror(";init sock_fd error";); exit(1); } recvlen=udpc_getdata(buff, sizeof(buff)); udpc_fina(); return 0; }
本文档为【udp广播发送数据】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_037433
暂无简介~
格式:doc
大小:26KB
软件:Word
页数:9
分类:生活休闲
上传时间:2018-04-05
浏览量:25