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语言快速入门
- 下一篇: 数据库事务隔离级别(转)