linuxC语言socket广播通信
来源:互联网 发布:淘宝上的彩妆正品店 铺 编辑:程序博客网 时间:2024/05/16 18:20
广播: 发送给所有主机
// enable BROADCAST
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,&on, sizeof(on));
// enable BROADCAST
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,&on, sizeof(on));
需要解析到传输层才能决定是否需要处理
SOCKET属性:
必须在socket之后 ,bind(如果有的话)之前设置
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on);
SOL_SOCKET, SO_REUSEADDR -- 地址复用
SO_BROADCAST ---- 广播属性
sockfd = socket(PF_INET, SOCK_DGRAM, 0);
// enable BROADCAST
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,&on, sizeof(on));
// 不在乎发送源的时候,就设置为 INADDR_ANY
实例:
receiver.c
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <poll.h>#include <string.h>#include <strings.h>#include <sys/socket.h>#include <sys/types.h>#include <arpa/inet.h>#include <netinet/in.h>#define MAXSIZE 80void usage(const char *info){printf("Usage: %s <srv PORT>\n", info);exit(0);}int main(int argc, char *argv[]){if(argc != 2)usage(argv[0]);int sockfd;char buf[MAXSIZE];struct sockaddr_in myaddr, peeraddr;<span style="white-space:pre"></span>//socket创建sockfd = socket(AF_INET, SOCK_DGRAM, 0);bzero(&myaddr, sizeof(myaddr));myaddr.sin_family = AF_INET;myaddr.sin_port = htons(atoi(argv[1]));myaddr.sin_addr.s_addr = htonl(INADDR_ANY);<span style="white-space:pre"></span>//绑定bind(sockfd, (struct sockaddr *)&myaddr, sizeof(myaddr));socklen_t len = sizeof(peeraddr);while(1){//接收recvfrom(sockfd, buf, MAXSIZE,0, (struct sockaddr *)&peeraddr, &len);//peeraddr 保存发送地址printf("recv from [%s:%d] : %s\n",inet_ntoa(peeraddr.sin_addr),ntohs(peeraddr.sin_port), buf);}return 0;}sender.c
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <poll.h>#include <string.h>#include <strings.h>#include <sys/socket.h>#include <sys/types.h>#include <arpa/inet.h>#include <netinet/in.h>#define MAXSIZE 80void usage(const char *info){printf("Usage: %s <srv IP> <srv PORT>\n", info);exit(0);}int main(int argc, char *argv[]){if(argc != 3)usage(argv[0]);int sockfd;char buf[MAXSIZE];struct sockaddr_in peeraddr;sockfd = socket(AF_INET, SOCK_DGRAM, 0); // enable BROADCASTint on = 1;setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));bzero(&peeraddr, sizeof(peeraddr));peeraddr.sin_family = AF_INET;peeraddr.sin_port = htons(atoi(argv[2]));peeraddr.sin_addr.s_addr = inet_addr(argv[1]);// strncpy(buf, "This is a broadcast message!\n", MAXSIZE);char str;while(1){scanf("%s",buf);sendto(sockfd, buf, MAXSIZE, 0,(struct sockaddr *)&peeraddr, sizeof(peeraddr));// 目标地址sleep(1);}return 0;}使用:
启用接收端./receiver 8888
启用发送端./sender 192.168.1.11 8888
注意端口要相同,地址是接收端的地址。
发到那个端口的,都会收到。
组播:
http://blog.csdn.net/stpeace/article/details/44657671
http://blog.csdn.net/jianchaolv/article/details/7909948
0 0
- linuxC语言socket广播通信
- C语言socket编程---udp通信及广播
- LinuxC/C++编程(10)—socket本地通信
- C语言-Socket通信
- C语言-Socket通信
- c语言socket通信
- c语言socket通信
- C语言-Socket通信
- socket通信C语言
- linuxc网络通信
- LinuxC语言笔记
- linuxC语言数组基础知识
- C语言之socket通信
- C语言socket通信实例
- socket实现广播和客户端到客户端的通信
- Android中的进程之间的通信(广播、AIDL、socket)
- 广播通信
- 广播通信
- android 自定义RatingBar背景图片
- 黑马程序员---java基础---面向对象中的构造方法及static关键字,变量的问题
- WIN7用键盘控制鼠标
- JAVA基础学习(十七)--集合四 工具类Collections
- oracle之简null空值问题,用nvl(a,b)函数解决
- linuxC语言socket广播通信
- JDBC数据库连接的简单应用
- MySQL笔记
- 数组拷贝 Array.copyof()方法与 System.arraycopy()方法
- ewq
- Maven-配置链接到私服及设置本地仓库
- 【bzoj3398】【Usaco2009 Feb】【Bullcow 牡牛和牝牛】【组合数学】
- Java equals() hashCode() 用法
- YARN源码学习(七)-----Task级别GC相关指标的自定义counter添加