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

做网站用后缀好/360开户推广

做网站用后缀好,360开户推广,邯郸做企业网站改版,做视频挣钱的网站I/O 多路复用:允许同时对多个I/O进行控制应用程序中同时处理多路输入输出流,若采用阻塞模式,将得不到预期的目的;若采用非阻塞模式,对多个输入进行轮询,但又太浪费CPU时间;若设置多个进程&#…

I/O 多路复用:允许同时对多个I/O进行控制

应用程序中同时处理多路输入输出流,若采用阻塞模式,将得不到预期的目的;

若采用非阻塞模式,对多个输入进行轮询,但又太浪费CPU时间;

若设置多个进程,分别处理一条数据通路,将新产生进程间的同步与通信问题,使程序变得更加复杂;

比较好的方法是使用I/O多路复用。其基本思想是:

先构造一张有关描述符的表,然后调用一个函数。当这些文件描述符中的一个或多个已准备好进行I/O时函数才返回。

函数返回时告诉进程那个描述符已就绪,可以进行I/O操作。

select函数

#include

#include

#include

#include

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

功能:允许一个程序处理多个文件描述符,阻塞等待文件描述符准备就绪,

如果有文件描述符准备就绪,函数立即返回,并执行相应的IO操作

参数:

nfds:最大的文件描述符加1

readfds:读文件描述符集合

writefds:写文件描述符集合

exceptfds:其他或者异常的文件描述符集合

timeout:超时模式, 设置NULL为默认模式:阻塞

返回值:

成功:准备就绪的文件描述符的个数

失败:-1

void FD_ZERO(fd_set *set);

清空集合set

void FD_SET(int fd, fd_set *set);

将文件描述符fd添加到集合set中

void FD_CLR(int fd, fd_set *set);

将文件描述符fd从集合set中移除

int FD_ISSET(int fd, fd_set *set);

判断文件描述符fd是否在集合set里面

注意:当select返回后,会移除除当前文件描述符以外其他所有的文件描述符,所以需要将文件描述符每次都添加

服务器端

#include //printf

#include //inet_addr htons

#include

#include //scoket bind listen accept connect

#include //sockaddr_in

#include //exit

#include //close

#include //strcat

#include

#include

#define N 128

#define errlog(errmsg) do{perror(errmsg);\

printf("%s-->%s-->%d\n", __FILE__, __func__, __LINE__);\

exit(1);\

}while(0)

int main(int argc, const char *argv[])

{

int sockfd, acceptfd;

struct sockaddr_in serveraddr, clientaddr;

socklen_t addrlen = sizeof(serveraddr);

char buf[N] = {};

if(argc < 3)

{

printf("the argument is too less\n");

exit(1);

}

//第一步:创建套接字

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

{

errlog("fail to socket");

}

//第二步:填充服务器网络信息结构体

serveraddr.sin_family = AF_INET;

serveraddr.sin_addr.s_addr = inet_addr(argv[1]);

serveraddr.sin_port = htons(atoi(argv[2]));

//第三步:将套接字域网络信息结构体绑定

if(bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0)

{

errlog("fail to bind");

}

//第四步:将套接字设置为监听状态

if(listen(sockfd, 5) < 0)

{

errlog("fail to listen");

}

//使用select函数实现IO多路复用

fd_set readfds;

int maxfd;

int i = 0;

int ret;

//第一步:初始化集合

FD_ZERO(&readfds);

maxfd = sockfd;

while(1)

{

//第二步:将需要的文件描述符添加到集合里面

FD_SET(0, &readfds) ;

FD_SET(sockfd, &readfds);

sleep(3);

//第三步:使用select函数阻塞等待文件描述符准备就绪

if((ret = select(maxfd + 1, &readfds, NULL, NULL, NULL)) < 0)

{

errlog("fail to select");

}

printf("ret = %d\n", ret);

//select函数成功返回1,意味着文件描述符已准备就绪,可执行相应的IO操作

//当select返回后,会移除除当前文件描述符以外其他所有的文件描述符

//第四步:执行对应的IO操作

for(i = 0; i < maxfd +1; i++)

{

if(FD_ISSET(i, &readfds))

{

if(i == 0) //当标准输入0被请求,执行输入

{

fgets(buf, N, stdin);

buf[strlen(buf) - 1] = '\0';

printf("buf >>> %s\n", buf);

}

else //因为只有标准输入0和sockfd两个描述符

{

if((acceptfd = accept(sockfd, (struct sockaddr *)&clientaddr, &addrlen)) < 0)

{

errlog("fail to accept");

}

printf("%s --> %d\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));

}

}

}

}

close(acceptfd);

close(sockfd);

return 0;

}

客户端

#include //printf

#include //inet_addr htons

#include

#include //scoket bind listen accept connect

#include //sockaddr_in

#include //exit

#include //close

#include

#define N 128

#define errlog(errmsg) do{perror(errmsg);\

printf("%s-->%s-->%d\n", __FILE__, __func__, __LINE__);\

exit(1);\

}while(0)

int main(int argc, const char *argv[])

{

int sockfd;

struct sockaddr_in serveraddr;

socklen_t addrlen = sizeof(serveraddr);

char buf[N] = {};

if(argc < 3)

{

printf("the argument is too less\n");

exit(1);

}

//第一步:创建套接字

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

{

errlog("fail to socket");

}

//第二步:填充服务器网络信息结构体

serveraddr.sin_family = AF_INET;

serveraddr.sin_addr.s_addr = inet_addr(argv[1]);

serveraddr.sin_port = htons(atoi(argv[2]));

//第三步:向服务器端 发送连接请求

if(connect(sockfd, (struct sockaddr *)&serveraddr, addrlen) < 0)

{

errlog("fail to connect");

}

close(sockfd);

return 0;

}

http://www.jmfq.cn/news/4852729.html

相关文章:

  • 网站建设的工作在哪里找客户资源/重庆网站快速排名优化
  • 功能网站开发多少钱/日本和韩国是亚洲的国家
  • 万网网站后台留言在哪/公司怎么做网站推广
  • 百度搜索不到我的网站/网络营销的好处
  • 网站建设应考虑哪些方面的问题/百度推广费用怎么算
  • 沈阳手机网站建设/宁德市高中阶段招生信息平台
  • php动态网站建设内容/seo外包网络公司
  • 自己怎样做优惠券网站/汕头搜索引擎优化服务
  • 青岛企业级网站设计/网络工具
  • 泰安网络犯罪案件/昆明自动seo
  • 慧聪网郭凡生/宁波seo排名方案优化公司
  • 网站怎么建设在哪里接单/免费广告投放平台
  • 网站快照优化怎么做/怎么宣传网站
  • 上海那家公司做响应式网站建设/seo资料网
  • 英文医疗网站建设/推广免费
  • 怎么在百度做原创视频网站/制作网页用什么软件
  • 学室内设计网站/百度如何做推广
  • 网站怎么做?/有什么好的网站吗
  • qq免费的推广引流软件/seo案例分析及解析
  • 有哪些网站做美食的图片很精致/网站外链发布平台
  • 做个网站怎么做/深圳seo外包公司
  • 网站建设销售技巧和话术/百度网站流量查询
  • 惠州网/百度手机端排名如何优化
  • 小程序申请流程/开封seo公司
  • 手机移动端网站做多大/暴风seo论坛
  • 微商/百度上做优化
  • 织梦手机网站怎么安装/qq群推广拉人
  • 杭州知名网站制作公司/seo长沙
  • 二手优品哪个网站做/厦门seo推广外包
  • 中国建设网建设通官方网站/网址查询站长工具