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

怎么制作一个免费的网站模板网站备案能查到什么

怎么制作一个免费的网站模板,网站备案能查到什么,什么是网站结构,自己如何做网站1.select的缺点#xff1a; 1.select监听的文件描述符集合是一个数组#xff0c;有上限#xff08;1024个#xff09; 2.select监听的文件描述符集合在应用层#xff0c;内核层监听事件后需要传递给用户层带来资源开销 3.select需要用户手动查找产生事件的文件…1.select的缺点     1.select监听的文件描述符集合是一个数组有上限1024个     2.select监听的文件描述符集合在应用层内核层监听事件后需要传递给用户层带来资源开销     3.select需要用户手动查找产生事件的文件描述符     4.select只能工作在水平触发模式(低速模式)而无法工作在边沿触发模式(高速模式) 2.poll      int poll(struct pollfd *fds, nfds_t nfds, int timeout);     功能:         监听文件描述符集合工作方式类似于select      参数:         fds:文件描述符集合首地址         nfds:文件描述符集合的数组的长度          timeout:超时时间单位毫秒-1表示永久等待     返回值:         成功返回产生事件文件描述符个数          失败返回-1          超时仍然没有产生的事件返回0           struct pollfd {         int   fd;         /* file descriptor */         short events;     /* requested events */         short revents;    /* returned events */     }; read.c #include head.hint main(void) {int fd 0;char tmpbuff[4096] {0};struct pollfd fds[2];int nready 0;mkfifo(/tmp/myfifo, 0777);fd open(/tmp/myfifo, O_RDONLY);if (-1 fd){perror(fail to open);return -1;}fds[0].fd fd; //要监听的文件描述符fds[0].events POLLIN; //要监听的事件fds[1].fd 0;fds[1].events POLLIN;while (1){nready poll(fds, 2, -1);if (-1 nready){perror(fail to poll);return -1;}if (fds[0].revents POLLIN){memset(tmpbuff, 0, sizeof(tmpbuff));read(fd, tmpbuff, sizeof(tmpbuff));printf(FIFO:%s\n, tmpbuff);}if (fds[1].revents POLLIN){memset(tmpbuff, 0, sizeof(tmpbuff));gets(tmpbuff);printf(STDIN:%s\n, tmpbuff);}}close(fd);return 0; } 1.poll的缺点:         1.poll监听的文件描述符集合在应用层内核层监听事件后需要传递给用户层带来资源开销         2.poll需要用户手动查找产生事件的文件描述符         3.poll只能工作在水平触发模式(低速模式)而无法工作在边沿触发模式(高速模式) 3.epoll     1.epoll_create       int epoll_create(int size);       功能:         在内核层创建一张epoll监听的事件表       参数:         size:监听的事件表大小       返回值:          成功返回新的文件描述符         失败返回-1     2.epoll_ctl        int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);       功能         管理内核中epoll事件表       参数         epfd:文件描述符          op: EPOLL_CTL_ADD   添加客户端              EPOLL_CTL_MOD   修改客户端              EPOLL_CTL_DEL   删除客户端         fd:文件描述符          event:事件结构体       返回值         成功返回0          失败返回-1     typedef union epoll_data {         void        *ptr;         int          fd;         uint32_t     u32;         uint64_t     u64;     } epoll_data_t;     struct epoll_event {         uint32_t     events;      /* Epoll events */         epoll_data_t data;        /* User data variable */     };       events:EPOLLIN  EPOLLOUT  EPOLLET            3.epoll_wait           int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);       功能:         监听epfd对应的事件表中是否有事件发生        参数          epfd:文件描述符          events:存放产生事件的数组空间首地址         maxevents:最多存放数组元素个数          timeout:超时时间单位毫秒-1表示永久等待       返回值:         成功返回实际发生事件的个数         失败返回-1          超时仍然没有产生事件返回0 #include head.hint main(void) { int epfd 0;int fd 0;int ret 0;char tmpbuff[4096] {0};struct epoll_event env;struct epoll_event retenv[2]; int nready 0;int i 0;mkfifo(/tmp/myfifo, 0777);fd open(/tmp/myfifo, O_RDONLY);if (-1 fd){perror(fail to open);return -1;}//创建一张内核监听的事件表epfd epoll_create(2);if (-1 epfd){perror(fail to epoll_create);return -1;}//将fd文件描述符加入事件表中env.events EPOLLIN;env.data.fd fd;ret epoll_ctl(epfd, EPOLL_CTL_ADD, fd, env);if (-1 ret){perror(fail to epoll_ctl);return -1;}//将0文件描述符加入事件表中env.events EPOLLIN;env.data.fd 0;ret epoll_ctl(epfd, EPOLL_CTL_ADD, 0, env);if (-1 ret){perror(fail to epoll_ctl);return -1;}while (1){ nready epoll_wait(epfd, retenv, 2, -1);if (-1 nready){perror(fail to epoll_wait);return -1;}for (i 0; i nready; i){if (retenv[i].data.fd fd){memset(tmpbuff, 0, sizeof(tmpbuff));read(fd, tmpbuff, sizeof(tmpbuff));printf(FIFO:%s\n, tmpbuff);}else if (retenv[i].data.fd 0){memset(tmpbuff, 0, sizeof(tmpbuff));gets(tmpbuff);printf(STDIN:%s\n, tmpbuff);}} }close(epfd);return 0; } epoll的优点         1.epoll没有文件描述符上限限制          2.epoll监听的事件表在内核层内核监听事件不需要操作用户层空间提高效率         3.epoll会获得产生事件的文件描述符,不需要用户查找         4.epoll可以工作在边沿触发模式(高速模式)提高效率 1.编写客户端和服务端实现基于UDP的聊天室     客户端         1.允许用户输入昵称         2.可以向服务端发送登录消息         3.可以向服务器发送退出消息         4.可以向服务器发送聊天消息     服务端          1.接收所有客户端的登录消息         2.接收所有客户端的退出消息         3.能够转发所有客户端的聊天消息 2.实现一个基于TCP的单词查询系统     dict.txt文件      1.编写客户端允许注册、注销、登录到服务器中     2.登录成功后客户端可以发送给服务器一个单词并获得单词的含义     3.客户端允许向服务器发送获得历史单词信息     1.服务器响应注册、注销、登录一系列功能     2.服务器响应客户端单词查询和历史搜索单词功能     3.服务器需要支持TCP并发模型支持多用户的并发请求 //服务端代码 #include head.hint main(int argc, char const *argv[]) {struct sockaddr_in seraddr;bzero(seraddr, sizeof(seraddr));int sockfd socket(AF_INET, SOCK_STREAM, 0);if(-1 sockfd){perror(fail to socket);return -1;}seraddr.sin_family AF_INET;seraddr.sin_port htons(50000);seraddr.sin_addr.s_addr INADDR_ANY;int bret bind(sockfd, (SA)seraddr, sizeof(seraddr));if(-1 bret){perror(fail to bind);return -1;}int lret listen(sockfd, 10);if(-1 lret){perror(fail to listen);return -1;}int serfd accept(sockfd, NULL, NULL);if(-1 serfd){perror(fail to accept);return -1;}FILE *fp fopen(dict.txt, r);if(fp NULL){perror(fail to fopen);return -1;}char word[128] {0};char summar[1024] {0};while(1){memset(word, 0, sizeof(word));fseek(fp, 0, SEEK_SET);recv(serfd, word, sizeof(word), 0);printf(%s\n, word);if(!strcmp(word, #quit)){break;}while(1){memset(summar, 0, sizeof(summar));char *psum summar;char *pret fgets(summar, sizeof(summar), fp);if(!strncmp(word, summar, strlen(word))){psum strlen(word);while(*psum ){psum;}send(serfd, psum, strlen(psum), 0);break;}if(NULL pret){char fail[64] please enter a correct word, or you can quit!\n;send(serfd, fail, strlen(fail), 0);break;}}}fclose(fp);close(sockfd);close(serfd);return 0; } //客户端代码 #include head.hint main(int argc, char const *argv[]) {struct sockaddr_in seraddr;bzero(seraddr, sizeof(seraddr));int sockfd socket(AF_INET, SOCK_STREAM, 0);if(-1 sockfd){perror(fail to socket);return -1;}seraddr.sin_family AF_INET;seraddr.sin_port htons(50000);seraddr.sin_addr.s_addr inet_addr(192.168.0.185);int conn connect(sockfd, (SA)seraddr, sizeof(seraddr));if(-1 conn){perror(fail to connect);return -1;}char word[128] {0};char mean[1024] {0};while(1){memset(word, 0, sizeof(word));memset(mean, 0, sizeof(mean));printf(enter a word:);scanf(%s, word);if(!strcmp(word, #quit)){break;}send(sockfd, word, strlen(word), 0);recv(sockfd, mean, sizeof(mean), 0);printf(%s, mean);}close(sockfd);return 0; } //头文件 #ifndef _HEAD_H_ #define _HEAD_H_#include stdio.h #include stdlib.h #include string.h #include strings.h #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include netinet/ip.h #include netinet/in.h #include arpa/inet.h #include sys/socket.h#endif
http://www.dnsts.com.cn/news/147132.html

相关文章:

  • 自己想做网站广州 电商设计网站建设
  • 网站改版后不收录建设电影网站需要什么
  • 广州化妆品网站设计公司网站横幅如何做
  • 网站建设公司 技术评估汕头金平区
  • 备案的网站有什么好处福建莆田网站开发
  • 官方网站建设流程广州地产网站设计
  • 有没有专门做售楼部包装的网站航拍中国 重庆
  • 做网站的投入教育网站制作服务
  • 益阳建设局网站wordpress 环镜
  • 设计云网站时光轴 网站
  • 我的网站设计联盟网页制作三剑客是指
  • 网站设计作品案例讲解做食品网站有哪些
  • wordpress建站位置临颖网站建设
  • 为什么建设银行网站购物网站建设方案
  • 东营网站推广公司专业网站改版
  • 网站怎样做外链网页设计师证书考试内容
  • 网站ui新网站做内链
  • 国产的主题wordpress南京seo公司哪家好
  • 网站商城微信支付wordpress重要插件
  • 只有asp网站代码可以重新编译吗网站建设工作简介
  • 网站开发包含哪些类别每平每屋在线设计家官网
  • 做企业网站一般要多少钱网站框架结构图
  • 知识产权网站开发英文公司网站制作
  • 瓷砖网站源码有做微推客的网站吗
  • 专业格泰建站分销系统什么意思
  • wordpress通过广告挣钱seo是什么软件
  • cnnic 网站网站开发语言net
  • 赣州市建设工程质量监督平台网站wordpress页脚二维码
  • 如何把图片做网站背景好看的wordpress插件
  • 站群cms系统东莞人才市场官网