网络编程--广播&组播
#include <netinet/in.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <net/if.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctype.h>
#define SERVER_PORT 5555
#define CLIENT_PORT 5556
#define MAXLINE 4096 int main(int argc,char *argv[])
{
struct sockaddr_in localaddr;
int confd;
ssize_t len;
char buf[MAXLINE]; //1.创建一个socket
confd=socket(AF_INET,SOCK_DGRAM,);
bzero(&localaddr,sizeof(localaddr));
localaddr.sin_family=AF_INET;
localaddr.sin_addr.s_addr=htonl(INADDR_BROADCAST);
localaddr.sin_port =htons(SERVER_PORT); int opt=-;
setsockopt(confd,SOL_SOCKET,SO_BROADCAST,(char*)&opt,sizeof(opt));
int clientlen=sizeof(struct sockaddr_in); while(){
fgets(buf,sizeof(buf),stdin);
sendto(confd,buf,strlen(buf),,(struct sockaddr*)&localaddr,clientlen);
len=recvfrom(confd,buf,sizeof(buf),,NULL,);
write(STDIN_FILENO,buf,len);
}
close(confd);
return ;
}
server.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <netinet/in.h>
#include <ctype.h>
#include <net/if.h> #define SERVER_PORT 5555
#define CLIENT_PORT 5556
#define MAXLINE 1024 int main(void)
{
int sockfd,i;
ssize_t len;
struct sockaddr_in serveraddr,clientaddr;
char buf[MAXLINE];
char ipstr[INET_ADDRSTRLEN];//16个字节
socklen_t clientlen; //构造用于UDP通信的套接字
sockfd=socket(AF_INET,SOCK_DGRAM,);
//绑定广播监听
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family =AF_INET;
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
serveraddr.sin_port=htons(SERVER_PORT);
//printf("%x\n",INADDR_ANY);
int opt=-;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,(char*)&opt,sizeof(opt));
bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); /*构造client地址 */
bzero(&clientaddr,sizeof(clientaddr));
clientaddr.sin_family=AF_INET;
clientaddr.sin_addr.s_addr=htonl(INADDR_ANY);
clientaddr.sin_port=htons(SERVER_PORT); clientlen=sizeof(struct sockaddr_in);
while(){
memset(buf,,sizeof(buf));
len=recvfrom(sockfd,buf,sizeof(buf),,(struct sockaddr*)&clientaddr,&clientlen);
printf("Rec from client--IP: %s\t PORT %d\n",
inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,ipstr,sizeof(ipstr)),
ntohs(clientaddr.sin_port));
i=;
while(i<len){
buf[i]=toupper(buf[i]);
i++;
}
buf[i]='\0';
sendto(sockfd,buf,strlen(buf),,(struct sockaddr*)&clientaddr,sizeof(clientaddr));
}
close(sockfd);
return ;
}
- 1:节点局部即局部于节点(node-local)
- 2:链路局部即局部于链路(link-local)
- 3:网点局部即局部于网点(site-local)
- 8:组织局部即局部于组织(orgainization-local)
- 14:全球(global)
server.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <netinet/in.h>
#include <ctype.h>
#include <net/if.h> #define SERVER_PORT 5555
#define CLIENT_PORT 5556
#define MAXLINE 1024
#define GROUP "239.0.0.2" int main(void)
{
int sockfd,i;
ssize_t len;
struct sockaddr_in serveraddr,clientaddr;
char buf[MAXLINE];
char ipstr[INET_ADDRSTRLEN];//16个字节
socklen_t clientlen;
struct ip_mreqn group;//设置组播 //构造用于UDP通信的套接字
sockfd=socket(AF_INET,SOCK_DGRAM,); bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family =AF_INET;
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
serveraddr.sin_port=htons(SERVER_PORT);
//printf("%x\n",INADDR_ANY);
bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
/*设置组地址*/
inet_pton(AF_INET,GROUP,&group.imr_multiaddr);
/*设置本地地址*/
inet_pton(AF_INET,"0.0.0.0",&group.imr_address);
group.imr_ifindex=if_nametoindex("eth0");//将网卡名转换成序号 等价 ip ad setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_IF,&group,sizeof(group));
/*构造client地址 IP+端口*/
bzero(&clientaddr,sizeof(clientaddr));
clientaddr.sin_family=AF_INET;
inet_pton(AF_INET,GROUP,&clientaddr.sin_addr.s_addr);
clientaddr.sin_port=htons(CLIENT_PORT);
while(){
fgets(buf,sizeof(buf),stdin);
sendto(sockfd,buf,strlen(buf),,(struct sockaddr*)&clientaddr,sizeof(clientaddr));
}
close(sockfd);
return ;
}
client.c
#include <netinet/in.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <net/if.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctype.h>
#define SERVER_PORT 5555
#define CLIENT_PORT 5556
#define MAXLINE 4096
#define GROUP "224.0.2.0" int main(int argc,char *argv[])
{
struct sockaddr_in serveraddr,localaddr;
int confd;
ssize_t len;
char buf[MAXLINE];
struct ip_mreqn group;//设置组播 //1.创建一个socket
confd=socket(AF_INET,SOCK_DGRAM,);
//2.初始化服务器地址
bzero(&localaddr,sizeof(localaddr));
localaddr.sin_family=AF_INET;
//
inet_pton(AF_INET,"0.0.0.0",&localaddr.sin_addr.s_addr);
localaddr.sin_port =htons(CLIENT_PORT);
bind(confd,(struct sockaddr *)&localaddr,sizeof(localaddr)); /*设置组地址*/
inet_pton(AF_INET,GROUP,&group.imr_multiaddr);
/*设置本地地址*/
inet_pton(AF_INET,"0.0.0.0",&group.imr_address);
group.imr_ifindex=if_nametoindex("eth0");//将网卡名转换成序号 等价 ip ad
/*设置客户端加入多播组*/
setsockopt(confd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&group,sizeof(group)); while(){
len=recvfrom(confd,buf,sizeof(buf),,NULL,);
write(STDIN_FILENO,buf,len);
}
close(confd);
return ;
}
网络编程--广播&组播的更多相关文章
- Ztack学习笔记(6)-广播组播点播
Zigbee网络中进行数据通信主要有三种类型:单播.组播.广播.那这三种方式如何设置呢,在哪里设置呢, 一. 广播 当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式.广播的短地址有三种 0 ...
- Linux IPC socket 广播,组播
getsockopt()/setsockopt() //获得sockfd指向的socket的属性 int getsockopt(int sockfd, int level, int optname, ...
- Linux网络编程组播测试代码
Linux网络编程组播测试代码 (转载) 组播客户端代码如下: #include <sys/types.h>#include <sys/socket.h>#include ...
- [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...
- IPv4组播通信原理
2011-05-08 21:21:14 标签:组播 vin_do,vin_do学习笔记,笔记 休闲 职场 摘自网络,感谢原作者 摘要: 本文试图成为学习TCP/IP网络组播技术的入门材料.文中介绍了组 ...
- IP组播技术介绍及实现例子
引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...
- day34 Pyhton 网络编程
一今日内容 # 函数 # 面向对象 # 进阶 # 网络编程 4 # 并发编程 6-7 # 概念 # 网络基础 # 局域网的概念 # 交换机和路由器的工作流程 # ip地址 # mac地址 # 子网掩码 ...
- Linux 系统编程 学习:06-基于socket的网络编程1:有关概念
Linux 系统编程 学习:006-基于socket的网络编程1:有关概念 背景 上一讲 进程间通信:System V IPC(2)中,我们介绍了System IPC中关于信号量的概念,以及如何使用. ...
- linux网络编程(一)
============================================================== 第一天:基本概念.TCP.FTP: =================== ...
随机推荐
- python 合并字符串
[root@chenbj python]# cat name.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ first_name = "ch ...
- Spring任务执行器(TaskExecutor)
Spring任务执行器(TaskExecutor) Spring通州任务执行器(TaskExecutor)来实现多线程和并发编程,使用ThreadPoolTaskExecutor可实现一个基于线 ...
- mysql数值函数
abs(x) -- 绝对值 abs(-10.9) = 10 format(x, d) -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46 ceil(x) ...
- office2010
MS office2010 360网盘:http://yunpan.cn/QajXaRWbnpTzF (提取码:cf72) 如何激活参见我下面的博客: http://www.cnblogs.com/l ...
- Laplace算子和Laplacian矩阵
1 Laplace算子的物理意义 Laplace算子的定义为梯度的散度. 在Cartesian坐标系下也可表示为: 或者,它是Hessian矩阵的迹: 以热传导方程为例,因为热流与温度的梯度成正比,那 ...
- JavaEE权限管理系统的搭建(一)--------项目中用到的知识点概括
转战Java有一段时间了,.net 已不再开发的新的工程,基本上在维护,最近大半年时间在学习Java,今天抽空将学习的到的知识,应用到了一个权限管理系统的小项目中,特此记录一下.代码如有不对之处,希望 ...
- 第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列
第15章 RCC—使用HSE/HSI配置时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...
- jquery 添加和删除节点
// 增加一个三和一节点 function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(&qu ...
- 前端小记4——高性能mobile web开发
1.高性能CSS3动画 与PC端场景需要相比,移动web端需要考虑的因素也相对复杂,重点考虑:流量.功耗与流畅度.在pc端上考虑更多的是流畅度,而mobile web中需要考虑网络流量的使用和耗电情况 ...
- Go标准库学习之OS常用函数
1.OS基础操作 //获取主机名 os.Hostname() //获取当前目录 os.Getwd() //获取用户ID os.Getuid() //获取有效用户ID os.Geteuid() //获取 ...