广播机制的cs模型实现如下:

  首先可以使用ifconfig命令查看自己所在网段的广播地址

server.c

 #include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include <strings.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<net/if.h> #define SERVER_PORT 8000 //服务端端口无关紧要
#define MAXLINE 1500 #define BROADCAST_IP "192.168.23.255"//所在局域网的广播IP
#define CLIENT_PORT 9000 //客户端端口必须指定 int main(int argc,char* argv[])
{
int sockfd;
struct sockaddr_in servaddr,clieaddr;
char buf[MAXLINE];
//构造用于UDP通信的套接字
sockfd = socket(AF_INET,SOCK_DGRAM,); bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET; //IPv4
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//本地任意有效IP
servaddr.sin_port = htons(SERVER_PORT); bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)); int flag = ;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&flag,sizeof(flag)); //构造client地址 IP+端口
bzero(&clieaddr,sizeof(clieaddr));
clieaddr.sin_family = AF_INET;
inet_pton(AF_INET,BROADCAST_IP,&clieaddr.sin_addr.s_addr);
clieaddr.sin_port = htons(CLIENT_PORT); int i = ;
while()
{
sprintf(buf,"服务端发送了广播%d 次\n",i++);
sendto(sockfd,buf,strlen(buf),,(struct sockaddr*)&clieaddr,sizeof(clieaddr));
sleep();
}
close(sockfd); return ;
}

client.c

 #include<stdio.h>
#include<stdlib.h>
#include<strings.h>
#include<string.h>
#include<sys/socket.h>
#include<unistd.h>
#include<sys/types.h>
#include<arpa/inet.h> #define SERVER_PORT 8000
#define CLIENT_PORT 9000
#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;
inet_pton(AF_INET,"0.0.0.0",&localaddr.sin_addr.s_addr);
localaddr.sin_port = htons(CLIENT_PORT); int ret = bind(confd,(struct sockaddr*)&localaddr,sizeof(localaddr));
if(ret == )
{
printf("...bind ok...\n");
}
while()
{
len = recvfrom(confd,buf,sizeof(buf),,NULL,);
write(STDOUT_FILENO,buf,len);
}
close(confd); return ;
}

测试结果:

广播机制的CS模型实现的更多相关文章

  1. Android广播机制的深入学习

    部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...

  2. Android总结篇系列:Android广播机制

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...

  3. Android广播机制概述

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...

  4. Android广播机制:Broadcast

    转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...

  5. Android广播机制(转)

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...

  6. Android广播机制

    原文出处: Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的 ...

  7. UDP协议----简单的CS模型实现

    UDP简单介绍 传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议.TCP协议在网络通信中占主导地位,绝大多数的网络通信借助TCP协议完成数据传输.但UDP也是网络通信中不可或缺 ...

  8. 深入理解计算机操作系统——第11章:CS模型,网络

    网络编程: 11.1 客户端-服务器编程模型 (1)一个应用是由一个服务器进程和一个或多个客户端进程组成. (2)服务器管理某种资源,并且操纵这种资源来为客户端服务. CS模型: CS的基本操作是事务 ...

  9. Android随笔之——Android广播机制Broadcast详解

    在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就 ...

随机推荐

  1. ES6数组相关

    ES6数组新增的几个方法: 1. forEach() //forEach()遍历数组,无返回值,不改变原数组 var arr=[1,2,3,4] arr.forEach((item,index,arr ...

  2. 170414、zookeeper和dubbo的关系

    Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用:         zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知 ...

  3. Django--20170905--笔记

    一.django的安装 1.先安装python 2.再安装django:pip install django 3.使用虚拟环境:pip install virtualenv 二.项目的创建 1.可以先 ...

  4. ionic 上拉加载问题(分页)

    问题描述: 1.第一初始化时执行了上拉加载更多. 2.上拉时存在执行多次加载动作. angularjs的ajax不提供同步机制,是为了防止页面长时间等待,很多时候我们又需要这种同步机制交换状态,比如上 ...

  5. poj1015 Jury Compromise【背包】

    Jury Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:32355   Accepted:8722   ...

  6. [已解决]centos6.4 php连接mysql和memcache提示权限不允许

    昨天新安装了64位系统,所以就重新安装了一个centos的虚拟机,配置了一个测试环境,刚开始是页面打不开,这个确定是selinux规则没有设置好使用如下命令解决: chcon -R -h -t htt ...

  7. 优秀Python学习资源收集汇总--强烈推荐(转)

    原文:http://www.cnblogs.com/lanxuezaipiao/p/3543658.html Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的 ...

  8. Django logging模块

    一.Django logging配置 1.在setting.py中配置 # 日志文件存放路径 BASE_LOG_DIR = os.path.join(BASE_DIR, "log" ...

  9. 具体解释linux下的串口通讯开发

    串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...

  10. sap 动态字段的使用

    1.sap中的动态字段其实类似c#里面的指针,都是指向的地址. 只是写法不同,sap 中的field-symbols就是类似指针. , b TYPE i. FIELD-SYMBOLS <fs&g ...