Linux系统下UDP发送和接收广播消息小样例
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Linux系统下UDP发送和接收广播消息小样例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            [cpp]?view plaincopy      //?發送端??  #include?<iostream>??  #include?<stdio.h>??  #include?<sys/socket.h>??  #include?<unistd.h>??  #include?<sys/types.h>??  #include?<netdb.h>??  #include?<netinet/in.h>??  #include?<arpa/inet.h>??  #include?<string.h>??  ??  ??  using?namespace?std;??  ??  int?main()??  {??  ????setvbuf(stdout,?NULL,?_IONBF,?0);???  ????fflush(stdout);???  ??  ????int?sock?=?-1;??  ????if?((sock?=?socket(AF_INET,?SOCK_DGRAM,?0))?==?-1)???  ????{?????  ????????cout<<"socket?error"<<endl;???  ????????return?false;??  ????}?????  ??????  ????const?int?opt?=?1;??  ????//設置該套接字為廣播類型,??  ????int?nb?=?0;??  ????nb?=?setsockopt(sock,?SOL_SOCKET,?SO_BROADCAST,?(char?*)&opt,?sizeof(opt));??  ????if(nb?==?-1)??  ????{??  ????????cout<<"set?socket?error..."<<endl;??  ????????return?false;??  ????}??  ??  ????struct?sockaddr_in?addrto;??  ????bzero(&addrto,?sizeof(struct?sockaddr_in));??  ????addrto.sin_family=AF_INET;??  ????addrto.sin_addr.s_addr=htonl(INADDR_BROADCAST);??  ????addrto.sin_port=htons(6000);??  ????int?nlen=sizeof(addrto);??  ??  ????while(1)??  ????{??  ????????sleep(1);??  ????????//從廣播地址發送消息??  ????????char?smsg[]?=?{"abcdef"};??  ????????int?ret=sendto(sock,?smsg,?strlen(smsg),?0,?(sockaddr*)&addrto,?nlen);??  ????????if(ret<0)??  ????????{??  ????????????cout<<"send?error...."<<ret<<endl;??  ????????}??  ????????else??  ????????{?????????  ????????????printf("ok?");????  ????????}??  ????}??  ??  ????return?0;??  }??   //?接收端?  ??  #include?<iostream>??  #include?<stdio.h>??  #include?<sys/socket.h>??  #include?<unistd.h>??  #include?<sys/types.h>??  #include?<netdb.h>??  #include?<netinet/in.h>??  #include?<arpa/inet.h>??  #include?<string.h>??  ??  ??  using?namespace?std;??  ??  int?main()??  {??  ????setvbuf(stdout,?NULL,?_IONBF,?0);???  ????fflush(stdout);???  ??  ????//?綁定地址??  ????struct?sockaddr_in?addrto;??  ????bzero(&addrto,?sizeof(struct?sockaddr_in));??  ????addrto.sin_family?=?AF_INET;??  ????addrto.sin_addr.s_addr?=?htonl(INADDR_ANY);??  ????addrto.sin_port?=?htons(6000);??  ??????  ????//?廣播地址??  ????struct?sockaddr_in?from;??  ????bzero(&from,?sizeof(struct?sockaddr_in));??  ????from.sin_family?=?AF_INET;??  ????from.sin_addr.s_addr?=?htonl(INADDR_ANY);??  ????from.sin_port?=?htons(6000);??  ??????  ????int?sock?=?-1;??  ????if?((sock?=?socket(AF_INET,?SOCK_DGRAM,?0))?==?-1)???  ????{?????  ????????cout<<"socket?error"<<endl;???  ????????return?false;??  ????}?????  ??  ????const?int?opt?=?1;??  ????//設置該套接字為廣播類型,??  ????int?nb?=?0;??  ????nb?=?setsockopt(sock,?SOL_SOCKET,?SO_BROADCAST,?(char?*)&opt,?sizeof(opt));??  ????if(nb?==?-1)??  ????{??  ????????cout<<"set?socket?error..."<<endl;??  ????????return?false;??  ????}??  ??  ????if(bind(sock,(struct?sockaddr?*)&(addrto),?sizeof(struct?sockaddr_in))?==?-1)???  ????{?????  ????????cout<<"bind?error..."<<endl;??  ????????return?false;??  ????}??  ??  ????int?len?=?sizeof(sockaddr_in);??  ????char?smsg[100]?=?{0};??  ??  ????while(1)??  ????{??  ????????//從廣播地址接受消息??  ????????int?ret=recvfrom(sock,?smsg,?100,?0,?(struct?sockaddr*)&from,(socklen_t*)&len);??  ????????if(ret<=0)??  ????????{??  ????????????cout<<"read?error...."<<sock<<endl;??  ????????}??  ????????else??  ????????{?????????  ????????????printf("%s\t",?smsg);?????  ????????}??  ??  ????????sleep(1);??  ????}??  ??  ????return?0;??  } ? 
                            
                        
                        
                        ?
[cpp]?view plaincopy總結
以上是生活随笔為你收集整理的Linux系统下UDP发送和接收广播消息小样例的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Swift语言快速入门
- 下一篇: 数据库事务隔离级别(转)
