Linux系統下UDP發送和接收廣播消息小例子

分類: 網絡通信 1336人閱讀 評論(6) 收藏 舉報
[cpp] view plaincopyprint?
  1. //?發送端 ??
  2. #include?<iostream> ??
  3. #include?<stdio.h> ??
  4. #include?<sys/socket.h> ??
  5. #include?<unistd.h> ??
  6. #include?<sys/types.h> ??
  7. #include?<netdb.h> ??
  8. #include?<netinet/in.h> ??
  9. #include?<arpa/inet.h> ??
  10. #include?<string.h> ??
  11. ??
  12. ??
  13. using?namespace?std;??
  14. ??
  15. int?main()??
  16. {??
  17. ????setvbuf(stdout,?NULL,?_IONBF,?0);???
  18. ????fflush(stdout);???
  19. ??
  20. ????int?sock?=?-1;??
  21. ????if?((sock?=?socket(AF_INET,?SOCK_DGRAM,?0))?==?-1)???
  22. ????{?????
  23. ????????cout<<"socket?error"<<endl;???
  24. ????????return?false;??
  25. ????}?????
  26. ??????
  27. ????const?int?opt?=?1;??
  28. ????//設置該套接字為廣播類型, ??
  29. ????int?nb?=?0;??
  30. ????nb?=?setsockopt(sock,?SOL_SOCKET,?SO_BROADCAST,?(char?*)&opt,?sizeof(opt));??
  31. ????if(nb?==?-1)??
  32. ????{??
  33. ????????cout<<"set?socket?error..."<<endl;??
  34. ????????return?false;??
  35. ????}??
  36. ??
  37. ????struct?sockaddr_in?addrto;??
  38. ????bzero(&addrto,?sizeof(struct?sockaddr_in));??
  39. ????addrto.sin_family=AF_INET;??
  40. ????addrto.sin_addr.s_addr=htonl(INADDR_BROADCAST);??
  41. ????addrto.sin_port=htons(6000);??
  42. ????int?nlen=sizeof(addrto);??
  43. ??
  44. ????while(1)??
  45. ????{??
  46. ????????sleep(1);??
  47. ????????//從廣播地址發送消息 ??
  48. ????????char?smsg[]?=?{"abcdef"};??
  49. ????????int?ret=sendto(sock,?smsg,?strlen(smsg),?0,?(sockaddr*)&addrto,?nlen);??
  50. ????????if(ret<0)??
  51. ????????{??
  52. ????????????cout<<"send?error...."<<ret<<endl;??
  53. ????????}??
  54. ????????else??
  55. ????????{?????????
  56. ????????????printf("ok?");????
  57. ????????}??
  58. ????}??
  59. ??
  60. ????return?0;??
  61. }??
// 發送端
#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;
}

?

[cpp] view plaincopyprint?
  1. //?接收端?http://blog.csdn.net/robertkun ??
  2. ??
  3. #include?<iostream> ??
  4. #include?<stdio.h> ??
  5. #include?<sys/socket.h> ??
  6. #include?<unistd.h> ??
  7. #include?<sys/types.h> ??
  8. #include?<netdb.h> ??
  9. #include?<netinet/in.h> ??
  10. #include?<arpa/inet.h> ??
  11. #include?<string.h> ??
  12. ??
  13. ??
  14. using?namespace?std;??
  15. ??
  16. int?main()??
  17. {??
  18. ????setvbuf(stdout,?NULL,?_IONBF,?0);???
  19. ????fflush(stdout);???
  20. ??
  21. ????//?綁定地址 ??
  22. ????struct?sockaddr_in?addrto;??
  23. ????bzero(&addrto,?sizeof(struct?sockaddr_in));??
  24. ????addrto.sin_family?=?AF_INET;??
  25. ????addrto.sin_addr.s_addr?=?htonl(INADDR_ANY);??
  26. ????addrto.sin_port?=?htons(6000);??
  27. ??????
  28. ????//?廣播地址 ??
  29. ????struct?sockaddr_in?from;??
  30. ????bzero(&from,?sizeof(struct?sockaddr_in));??
  31. ????from.sin_family?=?AF_INET;??
  32. ????from.sin_addr.s_addr?=?htonl(INADDR_ANY);??
  33. ????from.sin_port?=?htons(6000);??
  34. ??????
  35. ????int?sock?=?-1;??
  36. ????if?((sock?=?socket(AF_INET,?SOCK_DGRAM,?0))?==?-1)???
  37. ????{?????
  38. ????????cout<<"socket?error"<<endl;???
  39. ????????return?false;??
  40. ????}?????
  41. ??
  42. ????const?int?opt?=?1;??
  43. ????//設置該套接字為廣播類型, ??
  44. ????int?nb?=?0;??
  45. ????nb?=?setsockopt(sock,?SOL_SOCKET,?SO_BROADCAST,?(char?*)&opt,?sizeof(opt));??
  46. ????if(nb?==?-1)??
  47. ????{??
  48. ????????cout<<"set?socket?error..."<<endl;??
  49. ????????return?false;??
  50. ????}??
  51. ??
  52. ????if(bind(sock,(struct?sockaddr?*)&(addrto),?sizeof(struct?sockaddr_in))?==?-1)???
  53. ????{?????
  54. ????????cout<<"bind?error..."<<endl;??
  55. ????????return?false;??
  56. ????}??
  57. ??
  58. ????int?len?=?sizeof(sockaddr_in);??
  59. ????char?smsg[100]?=?{0};??
  60. ??
  61. ????while(1)??
  62. ????{??
  63. ????????//從廣播地址接受消息 ??
  64. ????????int?ret=recvfrom(sock,?smsg,?100,?0,?(struct?sockaddr*)&from,(socklen_t*)&len);??
  65. ????????if(ret<=0)??
  66. ????????{??
  67. ????????????cout<<"read?error...."<<sock<<endl;??
  68. ????????}??
  69. ????????else??
  70. ????????{?????????
  71. ????????????printf("%s\t",?smsg);?????
  72. ????????}??
  73. ??
  74. ????????sleep(1);??
  75. ????}??
  76. ??
  77. ????return?0;??
  78. }??
// 接收端 http://blog.csdn.net/robertkun
#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;
}


自已在Linux虛擬機下測試可以成功, 前提是要把主機設置在同一網段內, 還有就是不要忘記關閉Linux的防火墻.. 可以使用setup命令進行設置。

(我在測試的時候只能發送不收接收,折磨了我半天,后來才想到是Linux防火墻的問題。。)

?

關于虛擬機的網卡配置,建議選擇橋接模式。NAT的模式的話,是受限制的,可能會收不到廣播消息。

具體的參考網上的文章吧。。

祝你成功。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253323.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kaggle 泰坦尼克

入門kaggle&#xff0c;開始機器學習應用之旅。 參看一些入門的博客&#xff0c;感覺pandas&#xff0c;sklearn需要熟練掌握&#xff0c;同時也學到了一些很有用的tricks&#xff0c;包括數據分析和機器學習的知識點。下面記錄一些有趣的數據分析方法和一個自己擼的小程序。 1…

語音交互設備 前端信號處理技術和語音交互過程介紹

一、前端信號處理 1. 語音檢測&#xff08;VAD&#xff09; 語音檢測&#xff08;英文一般稱為 Voice Activity Detection&#xff0c;VAD&#xff09;的目標是&#xff0c;準確的檢測出音頻信號的語音段起始位置&#xff0c;從而分離出語音段和非語音段&#xff08;靜音或噪…

css中偽類與偽元素的區別

一&#xff1a;偽類&#xff1a;1:定義&#xff1a;css偽類用于向某些選擇器添加特殊效果。 偽類其實與普通的css類相類似&#xff0c;可以為已有的元素添加樣式&#xff0c;但是他只有處于dom無法描述的狀態下才能為文檔樹中的元素添加樣式&#xff0c;所以將其稱為偽類。 2:偽…

【BZOJ1500】[NOI2005]維修數列 Splay

【BZOJ1500】[NOI2005]維修數列 Description Input 輸入的第1 行包含兩個數N 和M(M ≤20 000)&#xff0c;N 表示初始時數列中數的個數&#xff0c;M表示要進行的操作數目。第2行包含N個數字&#xff0c;描述初始時的數列。以下M行&#xff0c;每行一條命令&#xff0c;格式參見…

bzoj2588: Spoj 10628. Count on a tree(樹上第k大)(主席樹)

每個節點繼承父節點的樹&#xff0c;則答案為query(root[x]root[y]-root[lca(x,y)]-root[fa[lca(x,y)]]) #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> using namespace std; const int maxn1…

圖文詳解YUV420數據格式

YUV格式有兩大類&#xff1a;planar和packed。 對于planar的YUV格式&#xff0c;先連續存儲所有像素點的Y&#xff0c;緊接著存儲所有像素點的U&#xff0c;隨后是所有像素點的V。 對于packed的YUV格式&#xff0c;每個像素點的Y,U,V是連續交*存儲的。 YUV&#xff0c;分為三個…

USB通信接口介紹

1. 概述 Usb Universal Serial Bus全稱通用串行總線&#xff0c;是一種支持熱插拔的高速串行傳輸總線&#xff0c;使用差分信號來傳輸數據。 USB設備可以直接和host通信&#xff0c;或者通過hub和host通信。一個USB系統中僅有一個USB主機&#xff0c;設備包括功能設備和hub&…

關于java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到達流末尾, 就返回null, 但如果client的socket末經關閉就銷毀, 則會產生IO異常. 正常的方法就是使用socket.close()關閉不需要的socket. 從一個有若干行的文件中依次讀取各行&#xff0c;處理后輸出&#xff0c;如果用以下方法…

HDCVI——一種創新性的高清視頻傳輸方案

什么是HDCVI 2012年11月&#xff0c;大華技術股份有限公司發布了具有自主知識產權的同軸高清傳輸接口技術HDCVI。HDCVI技術是一種基于已有SYV75-3或SYV75-5同軸電纜的高清視頻傳輸方法&#xff0c;能夠在低成本和較低質量的同軸電纜上實現超長距離高清視頻信號的可靠傳輸。相比…

typedef struct 用法

如果在c程序中我們寫&#xff1a;    typedef struct     {    int num;    int age;    }aaa,bbb,ccc;    這算什么呢&#xff1f;    我個人觀察編譯器&#xff08;VC6&#xff09;的理解&#xff0c;這相當于    typedef struct     …

智能機器人品牌簡介

隨著科技的發展&#xff0c;硬件的計算速度和大數據支撐&#xff0c;越來越多的智能化設備和產品出現在我們的面前&#xff0c;為我們的生活帶來更多便利。其中包括智能機器人&#xff0c;這種產品是有自己的“大腦”&#xff0c;可以接收人為指令&#xff0c;為人服務&#xf…

轉 Java對日期Date類進行加減運算一二三

請移步&#xff0c;https://blog.csdn.net/hacker_lees/article/details/74351838 &#xff0c;感謝博主分享轉載于:https://www.cnblogs.com/bestxyl/p/9790088.html

誕生之日 隨筆

今天我誕生了&#xff0c;祝自己誕生日happy&#xff0c;happy&#xff0c;happy&#xff01; 轉載于:https://www.cnblogs.com/xiaohuihui-/p/7594406.html

智能音箱 之 麥克風參數介紹

1. 定義 麥克風&#xff0c;學名為傳聲器&#xff0c;是將聲音信號轉換為電信號的能量轉換器件&#xff1b;聲—電轉換。 與揚聲器正好相反&#xff08;電—聲轉換&#xff09;&#xff0c;構成電聲設備的兩個終端&#xff0c;俗稱咪頭&#xff0c;麥克等。 是電聲系統的入口&a…

大屏幕行業發展現狀以及趨勢深刻剖析

瀏覽數: 689 海康威視&#xff1a;葉志龍 中國投影網&#xff1a;大屏幕顯示作為安防領域重要一環&#xff0c;而海康威視作為安防領域的佼佼者&#xff0c;請介紹海康威視大屏顯示系統DLP/LCD這兩大產品線&#xff1f;與行業同類產品相比&#xff0c;海康威視大屏拼接單元產品…

架構師是大忽悠嗎?阿里技術大牛告訴你真相!

來源&#xff1a;阿里云 作者&#xff1a;林昊&#xff08;花名畢玄&#xff09;&#xff0c;阿里巴巴技術保障部研究員&#xff0c;曾任淘寶網平臺架構部架構師。個人的研究方向主要為Java模塊化、動態化系統的構建&#xff0c;以及高性能大型分布式Java系統構建&#xff0c;主…

動手動腦-Java重載

有以下例子&#xff1a; 例&#xff1a; Using overloaded methods public class MethodOverload { public static void main(String[] args) { System.out.println("The square of integer 7 is " square(7)); System.out.println("\nThe square of double 7.…

利用django框架,手把手教你搭建數據可視化系統(一)

如何使用django去構建數據可視化的 web,可視化的結果可以呈現在web上。 使用django的MTV模型搭建網站 基礎鋪墊—MTV模型 Created with Raphal 2.1.0Request服務器&#xff08;Djangoweb&#xff09;Response首先&#xff0c;要搞清楚我們去訪問服務器&#xff0c;服務器返回信…

智能音箱 之 揚聲器喇叭介紹

在全雙工語音交互的系統中&#xff0c;功放的質量是非常重要的&#xff0c;因為AEC回聲消除對信號失真 是非常敏感的。音頻通路的整體諧波失真需要控制在5%以內。 對于整個系統的諧波失真來說&#xff0c;揚聲器是最關鍵的因素&#xff0c;其次是功放&#xff0c;麥克風的很小…

關于拓撲排序的問題-P3116 [USACO15JAN]會議時間Meeting Time

https://www.luogu.org/problem/show?pid3116 這道題目很水啊&#xff0c;但是我沒有1A&#xff0c;而且wa了好多&#xff1b; 題目意思我就不講了&#xff1b; 反正就是一個拓撲序dp&#xff1b; 但是這道題目規定了起點是1&#xff1b; 所以我一開始直接把1放進隊列里然…