当前位置: 首页 > news >正文

做风能的网站员工管理系统

做风能的网站,员工管理系统,市场营销管理,做网站小语种翻译多少钱一.I/O复用概述 /O复用使得多个程序能够同时监听多个文件描述符#xff0c;对提高程序的性能有很大帮助。以下情况适用于I/O复用技术#xff1a; ◼ TCP 服务器同时要处理监听套接字和连接套接字。 ◼ 服务器要同时处理 TCP 请求和 UDP 请求。 ◼ 程序要同时处理多个套接…一.I/O复用概述 /O复用使得多个程序能够同时监听多个文件描述符对提高程序的性能有很大帮助。以下情况适用于I/O复用技术 ◼ TCP 服务器同时要处理监听套接字和连接套接字。 ◼ 服务器要同时处理 TCP 请求和 UDP 请求。 ◼ 程序要同时处理多个套接字。 ◼ 客户端程序要同时处理用户输入和网络连接。 ◼ 服务器要同时监听多个端口 需要指出的是I/O 复用虽然能同时监听多个文件描述符但它本身是阻塞的。并且当 多个文件描述符同时就绪时如果不采取额外的措施程序就只能按顺序依处理其中的每一 个文件描述符这使得服务器看起来好像是串行工作的。如果要提高并发处理的能力可以 配合使用多线程或多进程等编程方法 二.select机制 1.select接口介绍         select 系统调用的用途是在一段指定时间内监听用户感兴趣的文件描述符的可读、 可写和异常等事件。         select 系统调用的原型如下 #include sys/select.hint select(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct ti meval *timeout);/*select 成功时返回就绪(可读、可写和异常)文件描述符的总数。如果在超时时间内 没有任何文件描述符就绪select 将返回 0。select 失败是返回-1.如果在 select 等待 期间程序接收到信号则 select 立即返回-1并设置 errno 为 EINTR。maxfd 参数指定的被监听的文件描述符的总数。它通常被设置为 select 监听的所 有文件描述符中的最大值1readfds、writefds 和 exceptfds 参数分别指向可读、可写和异常等事件对应的文件 描述符集合。应用程序调用 select 函数时通过这 3 个参数传入自己感兴趣的文件 描述符。select 返回时内核将修改它们来通知应用程序哪些文件描述符已经就绪 fd_set 结构如下#define __FD_SETSIZE 1024typedef long int __fd_mask;#define __NFDBITS (8 * (int) sizeof (__fd_mask))typedef struct{#ifdef __USE_XOPEN__fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];# define __FDS_BITS(set) ((set)-fds_bits)#else__fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];# define __FDS_BITS(set) ((set)-__fds_bits)#endif} fd_set;通过下列宏可以访问 fd_set 结构中的位FD_ZERO(fd_set *fdset); // 清除 fdset 的所有位FD_SET(int fd, fd_set *fdset); // 设置 fdset 的位 fdFD_CLR(int fd, fd_set *fdset); // 清除 fdset 的位 fdint FD_ISSET(int fd, fd_set *fdset);// 测试 fdset 的位 fd 是否被设置timeout 参数用来设置 select 函数的超时时间。它是一个 timeval 结构类型的指针采用指针参数是因为内核将修改它以告诉应用程序 select 等待了多久。timeval结构的定义如下struct timeval{long tv_sec; //秒数long tv_usec; // 微秒数};//struct timeval tv {5,0};如果给 timeout 的两个成员都是 0则 select 将立即返回。如果 timeout 传递 NULL则 select 将一直阻塞直到某个文件描述符就绪*/ 2.设计思路图解 3.测试代码 #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includesys/select.h #includetime.h#define STDIN 0 int main() {int fd STDIN;//键盘fd_set fdset;//集合收集描述符while(1)//因为不止检测一次{FD_ZERO(fdset);//清空集合每个位置0FD_ZEROFD_SET(fd,fdset);//将描述符fd添加到集合fdsetstruct timeval tv {5,0};//超时时间int n select(fd1,fdset,NULL,NULL,tv);//可能阻塞if(n -1)//select执行失败{printf(select err\n);}else if(n0)//超市没有找到可用事件描述符{printf(tme out\n);}else{if(FD_ISSET(fd,fdset)){char buff[128]{0};int num read(fd,buff,127);printf(num%d,buff%s\n,num,buff);}}} } ~ ~ ~ 4.tcp通过select实现并发连接 SER.C #includestdio.h // 标准输入输出库 #includestdlib.h // 标准库提供一些函数如malloc, free, rand等 #includestring.h // 字符串操作库 #includeunistd.h // UNIX标准函数库 #includesys/select.h// 选择库提供select函数 #includetime.h // 时间库 #includesys/socket.h// 套接字库 #includearpa/inet.h // 提供inet_addr等函数 #includenetinet/in.h// 提供一些网络相关的宏#define MAXFD 10 // 定义最大文件描述符数量// 初始化socket函数 int socket_init();// 初始化文件描述符数组 void fds_init(int fds[]){for(int i0; iMAXFD; i){fds[i] -1; // 将所有文件描述符初始化为-1表示未被使用} }// 将新的文件描述符添加到数组中 void fds_add(int fds[], int fd){for(int i0; iMAXFD; i){if(fds[i] -1){ // 找到数组中第一个未使用的文件描述符位置fds[i] fd; // 添加文件描述符break; // 退出循环}} }// 从未使用的文件描述符数组中删除指定的文件描述符 void fds_del(int fds[], int fd){for(int i0; iMAXFD; i){if(fds[i] fd){ // 找到要删除的文件描述符fds[i] -1; // 将其设置为-1表示未使用break; // 退出循环}} }// 接受客户端连接请求并添加到文件描述符数组 void accept_client(int sockfd, int fds[]){int c accept(sockfd, NULL, NULL); // 接受连接if(c 0){return; // 如果返回-1表示出错}printf(accept c %d\n, c);fds_add(fds, c); // 添加到文件描述符数组 }// 接收客户端发送的数据 void recv_date(int c, int fds[]){char buff[128] {0}; // 创建缓冲区int n recv(c, buff, 127, 0); // 接收数据if(n 0){printf(cli close\n);close(c); // 如果接收失败关闭连接fds_del(fds, c); // 从数组中删除该文件描述符return;}if(n 0){printf(time out(%d)\n, n); // 如果超时}printf(buff(c%d)%s\n, c, buff); // 打印接收到的数据send(c, ok, 2, 0); // 发送确认消息 }// 主函数 int main(){int sockfd socket_init(); // 初始化socketif(sockfd -1){exit(1); // 如果初始化失败退出程序}int fds[MAXFD]; // 文件描述符数组fds_init(fds); // 初始化数组fds_add(fds, sockfd); // 将监听的socket添加到数组fd_set fdset; // 创建文件描述符集合while(1){ // 无限循环等待事件FD_ZERO(fdset); // 清空文件描述符集合int maxfd -1; // 存储最大的文件描述符// 遍历文件描述符数组将所有文件描述符添加到集合中for(int i0; iMAXFD; i){if(fds[i] -1){continue; // 如果文件描述符未使用跳过}FD_SET(fds[i], fdset); // 添加到集合if(fds[i] maxfd){ // 更新最大文件描述符maxfd fds[i];}}struct timeval tv {5,0}; // 设置超时时间// 使用select等待直到有文件描述符准备好IO操作或超时int n select(maxfd1, fdset, NULL, NULL, tv);if(n -1){printf(select err\n); // 错误} else if(n 0){printf(time out\n); // 超时} else{// 遍历文件描述符数组检查哪些文件描述符准备好了IO操作for(int i0; iMAXFD; i){if(fds[i] -1){continue; // 如果文件描述符未使用跳过}if(FD_ISSET(fds[i], fdset)){ // 检查文件描述符是否被设置if(fds[i] sockfd){ // 如果是监听的socketaccept_client(sockfd, fds); // 接受新的连接} else{ // 如果是已连接的客户端recv_date(fds[i], fds); // 接收数据}}}}} }// 创建socket并绑定到端口 int socket_init(){int sockfd socket(AF_INET, SOCK_STREAM, 0); // 创建socketif(sockfd -1){return -1; // 创建失败返回-1}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(127.0.0.1); // IP地址int res bind(sockfd, (struct sockaddr*)saddr, sizeof(saddr)); // 绑定if(res -1){printf(bind err\n);return -1; // 绑定失败返回-1}if(listen(sockfd, 5) -1){ // 开始监听设置队列长度为5return -1; // 监听失败返回-1}return sockfd; // 返回socket文件描述符 } CLI.C #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includesys/socket.h #includenetinet/in.h #includearpa/inet.hint main() {int sockfd socket(AF_INET,SOCK_STREAM,0);if(sockfd -1){exit(1);}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(127.0.0.1);int res connect(sockfd,(struct sockaddr*)saddr,sizeof(saddr));if(res -1){printf(connct err\n);exit(1);}while(1){printf(input: );char buff[128]{0};fgets(buff,128,stdin);if(strncmp(buff,end,3)0){break;}send(sockfd,buff,strlen(buff)-1,0);memset(buff,0,128);recv(sockfd,buff,127,0);printf(buff%s\n,buff);}close(sockfd);exit(0); }
文章转载自:
http://www.morning.ychrn.cn.gov.cn.ychrn.cn
http://www.morning.htbbp.cn.gov.cn.htbbp.cn
http://www.morning.blqmn.cn.gov.cn.blqmn.cn
http://www.morning.hlfnh.cn.gov.cn.hlfnh.cn
http://www.morning.xdwcg.cn.gov.cn.xdwcg.cn
http://www.morning.zyffq.cn.gov.cn.zyffq.cn
http://www.morning.lgwpm.cn.gov.cn.lgwpm.cn
http://www.morning.lmxrt.cn.gov.cn.lmxrt.cn
http://www.morning.ynjhk.cn.gov.cn.ynjhk.cn
http://www.morning.bpmns.cn.gov.cn.bpmns.cn
http://www.morning.nytpt.cn.gov.cn.nytpt.cn
http://www.morning.rbnnq.cn.gov.cn.rbnnq.cn
http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn
http://www.morning.sltfk.cn.gov.cn.sltfk.cn
http://www.morning.fmrd.cn.gov.cn.fmrd.cn
http://www.morning.zfyr.cn.gov.cn.zfyr.cn
http://www.morning.sgjw.cn.gov.cn.sgjw.cn
http://www.morning.yrpg.cn.gov.cn.yrpg.cn
http://www.morning.rntby.cn.gov.cn.rntby.cn
http://www.morning.xinyishufa.cn.gov.cn.xinyishufa.cn
http://www.morning.pkmw.cn.gov.cn.pkmw.cn
http://www.morning.ntwfr.cn.gov.cn.ntwfr.cn
http://www.morning.wrbx.cn.gov.cn.wrbx.cn
http://www.morning.qbfs.cn.gov.cn.qbfs.cn
http://www.morning.zsgbt.cn.gov.cn.zsgbt.cn
http://www.morning.mehrim.com.gov.cn.mehrim.com
http://www.morning.pjyrl.cn.gov.cn.pjyrl.cn
http://www.morning.cplym.cn.gov.cn.cplym.cn
http://www.morning.yfddl.cn.gov.cn.yfddl.cn
http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn
http://www.morning.xdpjf.cn.gov.cn.xdpjf.cn
http://www.morning.kghhl.cn.gov.cn.kghhl.cn
http://www.morning.jyknk.cn.gov.cn.jyknk.cn
http://www.morning.tzzxs.cn.gov.cn.tzzxs.cn
http://www.morning.ymsdr.cn.gov.cn.ymsdr.cn
http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn
http://www.morning.xkpjl.cn.gov.cn.xkpjl.cn
http://www.morning.qxkcx.cn.gov.cn.qxkcx.cn
http://www.morning.3ox8hs.cn.gov.cn.3ox8hs.cn
http://www.morning.ypzr.cn.gov.cn.ypzr.cn
http://www.morning.nqnqz.cn.gov.cn.nqnqz.cn
http://www.morning.tymnr.cn.gov.cn.tymnr.cn
http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn
http://www.morning.sffkm.cn.gov.cn.sffkm.cn
http://www.morning.lcqrf.cn.gov.cn.lcqrf.cn
http://www.morning.hfnbr.cn.gov.cn.hfnbr.cn
http://www.morning.zqcsj.cn.gov.cn.zqcsj.cn
http://www.morning.xptkl.cn.gov.cn.xptkl.cn
http://www.morning.qscsy.cn.gov.cn.qscsy.cn
http://www.morning.hxftm.cn.gov.cn.hxftm.cn
http://www.morning.pdghl.cn.gov.cn.pdghl.cn
http://www.morning.cwqrj.cn.gov.cn.cwqrj.cn
http://www.morning.ysnbq.cn.gov.cn.ysnbq.cn
http://www.morning.nqlkb.cn.gov.cn.nqlkb.cn
http://www.morning.ztrht.cn.gov.cn.ztrht.cn
http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn
http://www.morning.lkjzz.cn.gov.cn.lkjzz.cn
http://www.morning.kxltf.cn.gov.cn.kxltf.cn
http://www.morning.gjqwt.cn.gov.cn.gjqwt.cn
http://www.morning.ynlpy.cn.gov.cn.ynlpy.cn
http://www.morning.dbqcw.com.gov.cn.dbqcw.com
http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn
http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn
http://www.morning.xxhc.cn.gov.cn.xxhc.cn
http://www.morning.tzkrh.cn.gov.cn.tzkrh.cn
http://www.morning.bpzw.cn.gov.cn.bpzw.cn
http://www.morning.gjmbk.cn.gov.cn.gjmbk.cn
http://www.morning.rwlsr.cn.gov.cn.rwlsr.cn
http://www.morning.wbhzr.cn.gov.cn.wbhzr.cn
http://www.morning.nngq.cn.gov.cn.nngq.cn
http://www.morning.tqjks.cn.gov.cn.tqjks.cn
http://www.morning.ghxtk.cn.gov.cn.ghxtk.cn
http://www.morning.bflwj.cn.gov.cn.bflwj.cn
http://www.morning.rnzbr.cn.gov.cn.rnzbr.cn
http://www.morning.txtzr.cn.gov.cn.txtzr.cn
http://www.morning.nypsz.cn.gov.cn.nypsz.cn
http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn
http://www.morning.sxcwc.cn.gov.cn.sxcwc.cn
http://www.morning.xdpjf.cn.gov.cn.xdpjf.cn
http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn
http://www.tj-hxxt.cn/news/243444.html

相关文章:

  • 个人网站价格合肥网站建设新手
  • 苏州建设招投标网站网络维护工作怎么样
  • 哪里可以制作网站河东网站建设公司
  • .课程网站建设与应用域名权重查询工具
  • 网站做备案关停会显示什么网站流量依赖率
  • 建立一个网站需要多少钱?网站开发开题报告计划进度安排
  • 可以发广告的100个网站网站开发项目 工作分解图
  • 个人网站不能放广告怎么赚钱河源市地震
  • 学院网站建设申请报告wap网站自动
  • 互联网网站开发合同定制开发软件公司
  • 专业网站建设新闻广东省建设工程交易中心网站
  • 大良营销网站公司wordpress本地怎么搬家
  • 网站建设要会什么软件做百度网站需要钱吗
  • 一台服务器做两个网站吗wordpress 一键转发
  • 网站rss怎么做江苏建设工程信息网一体化平台
  • 怎样做好网站建设设计竞价推广案例
  • 北京市住房城乡建设官方网站如何注册chn域名网站
  • 网站模板 介绍wordpress原始密码
  • 网站开发小图片杭州网站建设招聘网
  • 可信网站收费吗自己房子做民宿挂什么网站
  • 推广 高端网站设计淘宝一个关键词要刷多久
  • 南通网站建设排名精通网站建设需要学什么
  • 做好档案整理及网站建设qq官网登录入口网页版
  • 长治企业网站建设建设摩托车价格大全
  • 网站建设管理情况的通报手机网站建设价格是多少
  • 渭南网站建设与维护ks免费刷粉网站推广马上刷
  • 网站备案完成通知怎样建网上商城
  • 免费的站外推广wordpress上传文件功能
  • 京推推cms网站建设瑞安人才网
  • wordpress登录的图片不显示seo免费培训