广播实现
2016-03-17 15:34
357 查看
广播范例:
谁先接受绑定谁。Udp传输都遵循这个规则。
广播步骤:
接受:
1、 创建用户数据包套接字socket()
2、 绑定本地ip地址和端口bind()
3、 接受数据recvfrom()
4、 关闭socketfd(close())
发送:
1、 创建用户数据报套接字socket()
2、 打开广播功能setsockopt();
Int on=1;
Setsockopt(socketfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int));
3、 初始化接受方地址(指定该地址为组播地址192.168.1.255)struct sockaddr_in
4、 发送数据sendto()倒数第二个参数为第二步指定的ip和port
关闭套接字socket();
谁先接受绑定谁。Udp传输都遵循这个规则。
广播步骤:
接受:
1、 创建用户数据包套接字socket()
2、 绑定本地ip地址和端口bind()
3、 接受数据recvfrom()
4、 关闭socketfd(close())
发送:
1、 创建用户数据报套接字socket()
2、 打开广播功能setsockopt();
Int on=1;
Setsockopt(socketfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int));
3、 初始化接受方地址(指定该地址为组播地址192.168.1.255)struct sockaddr_in
4、 发送数据sendto()倒数第二个参数为第二步指定的ip和port
关闭套接字socket();
代码范例: 客户端(接受数据) #include<stdio.h> #include<netinet/in.h> #include<stdlib.h> #include<string.h> #include <sys/types.h> #include <sys/socket.h> #include<pthread.h> #include<strings.h> int main() { int socketfd = socket(AF_INET,SOCK_DGRAM,0);//、、、、、1.创建udp套接字 得到socketfd struct sockaddr_in saddr; memset(&saddr,0,sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_port = htons(6000); saddr.sin_addr.s_addr = htonl(INADDR_ANY); int s = sizeof(struct sockaddr_in); bind(socketfd,(struct sockaddr *)&saddr,s);//、、、、、、、2、绑定本机ip和port;bind() struct sockaddr_in caddr; char buf1[20]; int n; n = recvfrom(socketfd,buf1,20,0,(struct sockaddr *)&caddr,&s);//、、、、3、接受数据recvfrom()….caddr自动填写的。 buf1 = '\0'; printf("%s\n",buf1); close(socketfd);//、、、、、、、、、、、、、、、、、4、关闭套接字 } 服务器(发送数据) #include<stdio.h> #include<netinet/in.h> #include<stdlib.h> #include<string.h> #include <sys/types.h> #include <sys/socket.h> #include<pthread.h> #include<strings.h> int main() { int socketfd = socket(AF_INET,SOCK_DGRAM,0);//、、、、、1.创建套接字socket struct sockaddr_in saddr; memset(&saddr,0,sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_port = htons(6000); saddr.sin_addr.s_addr = inet_addr("192.168.193.255"); /* int on = 1; setsockopt(socketfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));//、、、、、2、打开广播功能 int s = sizeof(struct sockaddr); char *buf = "hello\0"; sendto(socketfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,s);//3、发送数据saddr为广播地址。 close(socketfd); }
相关文章推荐
- idea创建maven项目(web)
- iOS中为控件设置颜色渐变和透明度渐变
- 判断字符串长度,中英文混合
- HTML5新控件 - 数值输入框
- 腾讯实习生面试一面笔试题总结
- Xcode因为证书问题经常报的那些错
- linux系统学习笔记:无死角理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID
- HashTable 和 HashMap的区别
- spring 远程调用
- CarouselViewPager实现ViewPager的轮播效果
- Base64 Java org.apache.commons.codec.binary.Base64
- MYSQL--my.cnf配置中文详解
- js 继承
- oracle存储过程的基本语法
- 为什么子线程不能做ui操作
- 网络编程基础+UDP的实现
- 基于CacheManager组件的缓存产品配置
- 欧拉项目第18题Maximum path sum I
- VBA,iLogic,插件中使用学徒服务器
- 简要剖析PHP的Yii框架的组件化机制的基本知识