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

培训机构一般在什么网站做推广网站统计系统

培训机构一般在什么网站做推广,网站统计系统,wordpress 英文排版,如何编写一个appinet_pton:IP 字符串 → 网络字节序地址 ntohl:网络字节序 → 主机字节序 TCP状态转换图(重点) 可以通过下面这行代码查看目前网络状态 netstat -apn | grep client 1、主动发起请求端 close-->SYN-->SYN_SENT-->接收ACK、SYN-->SYN_SEN…
inet_pton:IP 字符串 → 网络字节序地址
ntohl:网络字节序 → 主机字节序

TCP状态转换图(重点) 

可以通过下面这行代码查看目前网络状态

netstat -apn | grep client

 

1、主动发起请求端  close-->SYN-->SYN_SENT-->接收ACK、SYN-->SYN_SENT-->发送ACK-->ESTABLISHED(数据通信状态).

2、主动关闭请求端ESTABLISHED-->发送FIN-->FIN_WAIT_1-->接收ACK-->FIN_WAIT_2(半关闭)-->接收对端FIN-->FIN_WAIT_2-->发送ACK-->TIME_WAIT-->等待2MSL时长-->CLOSE.

只有主动关闭连接方会经历TIME_WAIT状态。

3、被动接收连接请求端 close-->LISTEN-->接收SYN-->LISTEN-->发送ACK、SYN-->SYN_RCVD-->接收ACK-->ESTABLISHED.

4、被动关闭连接请求端ESTABLISHED-->接收SYN-->ESTABLISHED-->发送ACK-->CLOSE_WAIT-->发送FIN-->LAST_ACK-->接收ACK-->CLOSE. 

当被动关闭连接请求端处于CLOSE_WAIT的时候,主动关闭连接请求端处于半关闭状态。

重点记忆:ESTABLISHED、FIN_WAIT_2 <---->CLOSE_WAIT、TIME_WAIT(2MSL).

2MSL时长

一定出现在主动发送请求端。

保证最后一个ACK能成功被对端接收。(等待期间,对端没收到我发的ACK,对端会再次发送FIN请求)。

端口复用(让端口重复利用,固定操作)

在server代码的socket和bind之间插入下面代码

int opt = 1; // 取值一般只有两个 0/1
setsockopt(listenfd , SOL_SOCKET , SO_REUSEADDR , (void*)&opt , sizeof(opt));SO_REUSEADDR:允许重用本地地址
SO_RESUEPORT:允许重用本地端口成功返回0,失败-1

半关闭

通信双方中只有一端关闭通信 ---FIN_WAIT_2.

close(cfd);

close(cfd);
shutdown(int fd , int how);
how:   SHUT_RD;   关读端 SHUT_WR;   关写端SHUT_RDWR; 关读写端

这个函数不是很重要,结论:shutdown在关闭多个文件描述符应用的文件时,采用全关闭的方法,close只关闭一个(主要在dup2的时候用到的区别)。

select多路IO转接

借助内核,select来监听客户端连接、数据通信事件。

之前做的CS模型中都是服务器端自己做连接以及read/write等操作,这种方法相当于是有了一个秘书select,服务器端创建了lfd之后交给select,select监听是否有要建立连接的客户端,如果有,反馈给服务器端,让服务器端调用accept函数,创建cfd,之后再交给select,如果select监听到客户端有传数据的需求再反馈给服务器端。

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);nfds:所有监听的最大的文件描述符+1
fd_set *readfds, fd_set *writefds, fd_set *exceptfds:传入传出参数
fd_set *readfds:读文件描述符监听集合
fd_set *writefds:写文件描述符监听集合
fd_set *exceptfds:异常文件描述符监听集合
通常写和异常不使用,一般用NULL
可以参考位图timeout > 0 设置监听超时时长
timeout = 0 非阻塞监听,轮询
timeout = NULL 阻塞监听返回值 > 0 , 所有监听集合(3)中 , 满足对应事件总数
返回值 = 0 ,  所有监听集合(3)中 , 没有满足对应事件总数
返回值 = -1 , errno

 FD_ZERO

清空一个文件描述符集合。

void FD_ZERO(fd_set *set);eg. fd_set rset;
FD_ZERO(&rset);

 FD_SET

将待监听的文件描述符,添加到监听集合中。

void FD_SET(int fd, fd_set *set);
eg.
fd_set rset;
FD_ZERO(&rset);
FD_SET(3 , &rset);

FD_CLR

将一个文件描述符从监听集合中移除。

void FD_CLR(int fd, fd_set *set);

FD_ISSET

判断一个文件描述符是否在监听集合中。

int  FD_ISSET(int fd, fd_set *set);
返回值:在返回1 不在返回0

多路复用IO转接代码思路

lfd = socket();                  //创建套接字
bind();                          //绑定地址结构
listen();                        //设置监听上限
fd_set rset , allset;            //创建读监听集合
FD_ZERO(&rset);                  
FD_ZERO(&allset);                //将读监听集合清零
FD_SET(lfd , &allset);           //将lfd添加至读监听集合中
while(1){rset = allset;ret = select(lfd + 1 , &rset , NULL , NULL , NULL); //监听文件描述符集合对应的事件if(ret > 0){if(FD_ISSET(lfd , &rset))  //1 在 , 0不在{    cfd = accept();FD_SET(cfd , &allset);}for(i = lfd + 1 ; i <= 最大文件描述符; i++){FD_ISSET(i , &rset);read();toupper();write();}}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<pthread.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<ctype.h>
#define SER_PORT 9003void sys_err(char* s)
{perror(s);exit(1);
}int main(int argc , char *argv[])
{int lfd , cfd ,maxfd , i , n , k;char buf[BUFSIZ];struct sockaddr_in serv_addr , clit_addr;socklen_t clit_addr_len;bzero(&serv_addr , sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(SER_PORT);serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);lfd = socket(AF_INET , SOCK_STREAM , 0);if(lfd == -1)sys_err("socket error");int opt = 1;setsockopt(lfd , SOL_SOCKET , SO_REUSEADDR , (void*)&opt , sizeof(opt));int ret = bind(lfd , (struct sockaddr*)&serv_addr , sizeof(serv_addr));if(ret == -1)sys_err("bind error");listen(lfd , 128);fd_set rset , allset; //定义读集合和备份集合FD_ZERO(&rset);FD_ZERO(&allset);FD_SET(lfd , &allset); //添加到读集合中maxfd = lfd; //最大文件描述符while(1){rset = allset; //备份ret = select(maxfd + 1 , &rset , NULL , NULL , NULL); //使用select监听clit_addr_len = sizeof(clit_addr);if(ret > 0){if(FD_ISSET(lfd , &rset)){cfd = accept(lfd , (struct sockaddr*)&clit_addr , &clit_addr_len); //建立连接,不会阻塞。FD_SET(cfd , &allset); //将新产生的cfd添加到监听读集合中,监听数据读事件if(maxfd < cfd)maxfd = cfd;if(ret == 1) //说明select只返回一个并且是lfd,后续无需执行。continue;}for(i = lfd + 1 ; i <= maxfd ; i++){   //处理满足读事件的fdif(FD_ISSET(i , &rset)){            //找到满足读事件的fdn = read(i , buf , sizeof(buf));if(n == 0){    //检测到客户端关闭close(i);  FD_CLR(i , &allset); // 移除}else if(n < 0){sys_err("read error");}else{for(k = 0 ; k < n ; k++){buf[k] = toupper(buf[k]);}write(STDOUT_FILENO , buf , n);write(i , buf , n);}}}}else if(ret < 0){sys_err("select error");}}close(cfd);return 0 ;
}

但是上述代码有个问题,就是当rset为[3,6,1023],相当于要循环判断1023次,运行效率低。可以自定义一个数组,将要监听的文件描述符放到数组中。然后根据下标索引取出需要的文件描述符。

select的优缺点

缺点:

1、监听上限受文件描述符限制,最大1024。

2、检测满足条件的fd,自己添加业务逻辑提高小。提高了编码难度。

优点:

1、跨平台。win、Linux、macos、unix、mips。

 


文章转载自:

http://4npaKhcT.bnmfq.cn
http://E9Vqr8YO.bnmfq.cn
http://d2WLeXHl.bnmfq.cn
http://Otg2yHq6.bnmfq.cn
http://41Ga5Adq.bnmfq.cn
http://9NVFxb4V.bnmfq.cn
http://PQctcmBN.bnmfq.cn
http://xrIKgZ1c.bnmfq.cn
http://f9rvi4mX.bnmfq.cn
http://fsP41DXz.bnmfq.cn
http://vGiOCIp2.bnmfq.cn
http://nx9WKJCc.bnmfq.cn
http://88LVR3ZX.bnmfq.cn
http://ApEjgwql.bnmfq.cn
http://uRalspzt.bnmfq.cn
http://n1hc0aJM.bnmfq.cn
http://moWyhmvU.bnmfq.cn
http://t8g4jRUT.bnmfq.cn
http://BXJpjiGA.bnmfq.cn
http://RJbTsqWV.bnmfq.cn
http://3B2FtliL.bnmfq.cn
http://f31ONHbU.bnmfq.cn
http://PblOWnpq.bnmfq.cn
http://9wxaus8v.bnmfq.cn
http://zVGNNzg1.bnmfq.cn
http://I2hGAQsh.bnmfq.cn
http://7ZXg4cQJ.bnmfq.cn
http://EFxXdMCi.bnmfq.cn
http://tDAQ05Fp.bnmfq.cn
http://vStc6EGu.bnmfq.cn
http://www.dtcms.com/wzjs/641672.html

相关文章:

  • 搭建网站手机软件WordPress主题get
  • 查竣工验收报告的网站html5网页设计作业免费
  • 惠州个人做网站联系人网站网页建设论文
  • 化妆品商城网站建设郑州做网站九零后
  • 怎么发现网站漏洞而做软件网站手机页面如何做
  • 山东鲁中公路建设有限公司网站运营的三个核心要素
  • 网站搜索显示图片wordpress 用户后台
  • 新网站要多久收录网站建设费账务处理
  • 沟通交流型网站广告如何做盈利网站
  • 利用公共dns做网站解析个人静态网页制作
  • photoshop制作网站海报盗版小说网站怎么做的
  • 建设企业网站需要考虑的因素有哪些手机电商网站模板
  • asp美食网站源码长沙微网站电话号码
  • 关键词搜索工具好站网网站建设制作ppt
  • 网站开发常用语言总结网站开发5000
  • 爱站网挖掘工具建设网站的公司有哪些知乎
  • 部分网站dns解析失败wordpress过滤评论插件
  • 模板网站与 定制网站的 对比网站显示内容不显示不出来
  • 网站cms系统源码创建网站销售产品
  • 做购物网站步骤做学校网站
  • 怎么申请网站详细步骤太原不错的互联网公司
  • 陕西交通建设集团官方网站适合vue做的网站类型
  • 网站开发项目合同书wordpress邮箱
  • 咸宁响应式网站建设价格景观设计师
  • 南康网站建设福田蒙派克10座黄牌报价
  • 做一个免费网站英文网站建站山东
  • 怎么才能创建网站seo搜索引擎优化期末及答案
  • 学网站建设的软件svg wordpress
  • 专业柳州网站建设价格上海网站建设网页制作邢台
  • 建行网站首页登录开发公司和施工单位电费的处理