首页 / LINUX / Linux 网络通信之广播
Linux 网络通信之广播
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux 网络通信之广播,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2750字,纯文字阅读大概需要4分钟。
内容图文
![Linux 网络通信之广播](/upload/InfoBanner/zyjiaocheng/1166/5f2a3e49bcdb4e869fe3ccff235fbe2b.jpg)
IP地址用来标识网络中的一台主机。IPV4协议用一个32位的无符号数表示网络地址,包括网络号和主机号。子网掩码表示IP地址中网络号占几个字节。
每个网段都有对应的广播地址。以C类网段192.168.1.x为例,其中最小的地址192.168.1.0代表该网段;而最大的地址192.168.1.255则是该网段中的广播地址。当我们想这个地址发送数据包时,该网段的所有主机都会接收并处理。
广播包的发送和接收通过UDP套接字实现
广播包发送流程如下:
(1)创建UDP套接字;socket(AF_INET, SOCK_DGRAM, 0)
(2)填充广播信息结构体;struct sockaddr_in
(3)设置套接字选项允许发送广播包;setsockopt(, ,SO_BROADCAST, ,)
(4)发送数据包;sendto( )
send.c
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <sys/types.h> 5 #include <sys/socket.h> 6 #include <arpa/inet.h> 7 #include <netinet/in.h> 8 #include <string.h> 910#define err_log(log) do{perror(log); exit(1);}while(0) 1112#define N 128 1314int main(int argc, constchar *argv[]) 15{ 1617int sockfd; 18struct sockaddr_in broadcastaddr; 19char buf[N] = {0}; 2021if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 22 { 23 err_log("fail to socket"); 24 } 2526 broadcastaddr.sin_family = AF_INET; 27 broadcastaddr.sin_addr.s_addr = inet_addr("192.168.1.255"); 28 broadcastaddr.sin_port = htons(10000); 2930int optval = 1; 3132if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(int)) < 0) 33 { 34 err_log("fail to setsockopt"); 35 } 3637while(1) 38 { 39 printf("Input > "); 40 fgets(buf, N, stdin); 41if(sendto(sockfd,buf, N, 0, (struct sockaddr *)&broadcastaddr, sizeof(broadcastaddr)) < 0) 42 { 43 err_log("fail to sendto"); 44 } 4546 } 4748return0; 49 }
广播包接收流程如下:
(1)创建UDP套接字;socket(AF_INET, SOCK_DGRAM, 0)
(2)填充广播信息结构体;struct sockaddr_in
(3)绑定地址和端口;bind( )
(4)接收数据包;recvfrom( )
recv.c
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <sys/types.h> 5 #include <sys/socket.h> 6 #include <arpa/inet.h> 7 #include <netinet/in.h> 8 #include <string.h> 910#define err_log(log) do{perror(log); exit(1);}while(0) 11#define N 128 1213int main(int argc, constchar *argv[]) 14{ 1516int sockfd; 17char buf[N]; 18struct sockaddr_in broadcastaddr, srcaddr; 1920if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 21 { 22 err_log("fail to socket"); 23 } 2425 broadcastaddr.sin_family = AF_INET; 26 broadcastaddr.sin_addr.s_addr = inet_addr("192.168.1.255"); 27 broadcastaddr.sin_port = htons(10000); 2829if(bind(sockfd, (struct sockaddr*)&broadcastaddr, sizeof(broadcastaddr)) < 0) 30 { 31 err_log("fail to bind"); 32 } 3334 socklen_t addrlen = sizeof(struct sockaddr); 3536while(1) 37 { 38if(recvfrom(sockfd,buf, N, 0, (struct sockaddr *)&srcaddr, &addrlen) < 0) 39 { 40 err_log("fail to sendto"); 41 } 42 printf("buf:%s ---> %s %d\n", buf, inet_ntoa(srcaddr.sin_addr), ntohs(srcaddr.sin_port)); 43 } 4445return0; 46 }
原文:http://www.cnblogs.com/yangziwen0709/p/5025902.html
内容总结
以上是互联网集市为您收集整理的Linux 网络通信之广播全部内容,希望文章能够帮你解决Linux 网络通信之广播所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。