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

社区网站开发线上营销策略有哪些

社区网站开发,线上营销策略有哪些,淄博有做互联网广告的公司,wordpress微信采集按钮1.TCP状态转换 在TCP进行三次握手#xff0c;或者四次挥手的过程中#xff0c;通信的服务器和客户端内部会发送状态上的变化#xff0c;发生的状态变化在程序中是看不到的#xff0c;这个状态的变化也不需要程序猿去维护#xff0c;但是在某些情况下进行程序的调试会去查…1.TCP状态转换  在TCP进行三次握手或者四次挥手的过程中通信的服务器和客户端内部会发送状态上的变化发生的状态变化在程序中是看不到的这个状态的变化也不需要程序猿去维护但是在某些情况下进行程序的调试会去查看相关的状态信息先来看三次握手过程中的状态转换。 1.1三次握手 在第一次握手之前服务器端必须先启动并且已经开始了监听- 服务器端先调用了 listen() 函数, 开始监听- 服务器启动监听前后的状态变化: 没有状态 --- LISTEN 当服务器监听启动之后由客户端发起的三次握手过程中状态转换如下 第一次握手: 客户端调用了connect() 函数状态变化没有状态 - SYN_SENT服务器收到连接请求SYN状态变化LISTEN - SYN_RCVD 第二次握手: 服务器给客户端回复ACK并且请求和客户端建立连接状态无变化依然是 SYN_RCVD客户端接收数据收到了ACK状态变化SYN_SENT - ESTABLISHED 第三次握手: 客户端给服务器回复ACK同意建立连接状态没有变化还是 ESTABLISHED服务器收到了ACK状态变化SYN_RCVD - ESTABLISHED 三次握手完成之后客户端和服务器都变成了同一种状态这种状态叫ESTABLISHED表示双向连接已经建立 可以通信了。在通过过程中正常的通信状态就是 ESTABLISHED。 1.2四次挥手 关于四次挥手对于客户端和服务器哪段先断开连接没有要求根据实际情况处理即可。下面根据上图中的实例描述一下四次挥手过程中TCP的状态转换上图中主动断开连接的一方是客户端 第一次挥手: 客户端调用close() 函数将tcp协议中的FIN设置为1请求和服务器断开连接状态变化:ESTABLISHED - FIN_WAIT_1服务器收到断开连接请求状态变化: ESTABLISHED - CLOSE_WAIT 第二次挥手: 服务器回复ACK同意断开连接的请求状态没有变化还是 CLOSE_WAIT客户端收到ACK状态变化FIN_WAIT_1 - FIN_WAIT_2 第三次挥手: 服务器端调用close() 函数发送FIN给客户端请求断开连接状态变化CLOSE_WAIT - LAST_ACK客户端收到FIN状态变化FIN_WAIT_2 - TIME_WAIT 第四次挥手: 客户端回复ACK给服务器状态是没有变化的状态变化TIME_WAIT - 没有状态服务器端收到ACK双向连接断开状态变化LAST_ACK - 无状态(没有了) 1.3状态转换 在下图中同样是描述TCP通信过程中的客户端和服务器端的状态转看起来比较乱其实只需要看两条主线红色实线和绿色虚线。关于黑色的实线对应的是一些特殊情况下的状态切换在此不做任何分析。 因为三次握手是由客户端发起的据此分析红色的实线表示的客户端的状态绿色虚线表示的是服务器端的状态。 客户端 第一次握手发送SYN没有状态 - SYN_SENT第二次握手收到回复的ACKSYN_SENT - ESTABLISHED主动断开连接第一次挥手发送FIN状态ESTABLISHED - FIN_WAIT_1第二次挥手收到ACK状态FIN_WAIT_1 - FIN_WAIT_2第三次挥手收到FIN状态FIN_WAIT_2 - TIME_WAIT第四次挥手回复ACK等待2倍报文时长之后状态TIME_WAIT - 没有状态 服务器端 启动监听没有状态 - LISTEN第一次握手收到SYN状态LISTEN - SYN_RCVD第三次握手收到ACK状态SYN_RCVD - ESTABLISHED收到断开连接请求第一次挥手状态 ESTABLISHED - CLOSE_WAIT第三次挥手发送FIN请求和客户端断开连接状态CLOSE_WAIT - LAST_ACK第四次挥手收到ACK状态LAST_ACK - 无状态(没有了) 在TCP通信的时候当主动断开连接的一方接收到被动断开连接的一方发送的FIN和最终的ACK后第三次挥手完成连接的主动关闭方必须处于TIME_WAIT状态并持续2MSLMaximum Segment Lifetime时间这样就能够让TCP连接的主动关闭方在它发送的ACK丢失的情况下重新发送最终的ACK。 一倍报文寿命(MSL)大概时长为30s因此两倍报文寿命一般在1分钟作用。 主动关闭方重新发送的最终ACK是因为被动关闭方重传了它的FIN。事实上被动关闭方总是重传FIN直到它收到一个最终的ACK。 1.4相关命令 $ netstat 参数 $ netstat -apn | grep 关键字 参数: -a (all)显示所有选项-p 显示建立相关链接的程序名-n 拒绝显示别名能显示数字的全部转化成数字。-l 仅列出有在 Listen (监听) 的服务状态-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项 2.半关闭 TCP连接只有一方发送了FIN另一方没有发出FIN包仍然可以在一个方向上正常发送数据这中状态可以称之为半关闭或者半连接。当四次挥手完成两次的时候就相当于实现了半关闭在程序中只需要在某一端直接调用 close() 函数即可。套接字通信默认是双工的也就是双向通信如果进行了半关闭就变成了单工数据只能单向流动了。比如下面的这个例子 服务器端: 调用了close() 函数因此不能发数据只能接收数据关闭了服务器端的写操作现在只能进行读操作 – 变成了读端 客户端: 没有调用close()客户端和服务器的连接还保持着客户端可以给服务器发送数据也可以接收服务器发送的数据 但是服务器已经丧失了发送数据的能力因此客户端也只能发送数据接收不到数据 – 变成了写端 按照上述流程做了半关闭之后从双工变成了单工数据单向流动的方向: 客户端 —– 服务器端。 // 专门处理半关闭的函数 #include sys/socket.h // 可以有选择的关闭读/写, close()函数只能关闭写操作 int shutdown(int sockfd, int how);参数: sockfd: 要操作的文件描述符how: SHUT_RD: 关闭文件描述符对应的读操作SHUT_WR: 关闭文件描述符对应的写操作SHUT_RDWR: 关闭文件描述符对应的读写操作返回值函数调用成功返回0失败返回-1 3.端口复用 在网络通信中一个端口只能被一个进程使用不能多个进程共用同一个端口。我们在进行套接字通信的时候如果按顺序执行如下操作先启动服务器程序再启动客户端程序然后关闭服务器进程再退出客户端进程最后再启动服务器进程就会出如下的错误提示信息bind error: Address already in use # 第二次启动服务器进程 $ ./server bind error: Address already in use$ netstat -apn|grep 9999 (Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.) tcp 0 0 127.0.0.1:9999 127.0.0.1:50178 TIME_WAIT - 通过netstat查看TCP状态发现上一个服务器进程其实还没有真正退出。因为服务器进程是主动断开连接的进程, 最后状态变成了 TIME_WAIT状态这个进程会等待2msl(大约1分钟)才会退出如果该进程不退出其绑定的端口就不会释放再次启动新的进程还是使用这个未释放的端口端口被重复使用就是提示bind error: Address already in use这个错误信息。 如果想要解决上述问题就必须要设置端口复用使用的函数原型如下 // 这个函数是一个多功能函数, 可以设置套接字选项 int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);参数: sockfd用于监听的文件描述符level设置端口复用需要使用 SOL_SOCKET 宏optname要设置什么属性下边的两个宏都可以设置端口复用 SO_REUSEADDRSO_REUSEPORToptval设置是去除端口复用属性还是设置端口复用属性实际应该使用 int 型变量 0不设置1设置optlenoptval指针指向的内存大小 sizeof(int) 这个函数应该添加到服务器端代码中具体应该放到什么位置呢答在绑定之前设置端口复用 创建监听的套接字设置端口复用绑定设置监听等待并接受客户端连接通信断开连接 参考代码如下: #include stdio.h #include ctype.h #include unistd.h #include stdlib.h #include sys/types.h #include sys/stat.h #include string.h #include arpa/inet.h #include sys/socket.h #include sys/select.h// server int main(int argc, const char* argv[]) {// 创建监听的套接字int lfd socket(AF_INET, SOCK_STREAM, 0);if(lfd -1){perror(socket error);exit(1);}// 绑定struct sockaddr_in serv_addr;memset(serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family AF_INET;serv_addr.sin_port htons(9999);serv_addr.sin_addr.s_addr htonl(INADDR_ANY); // 本地多有的// 127.0.0.1// inet_pton(AF_INET, 127.0.0.1, serv_addr.sin_addr.s_addr);// 设置端口复用int opt 1;setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, opt, sizeof(opt));// 绑定端口int ret bind(lfd, (struct sockaddr*)serv_addr, sizeof(serv_addr));if(ret -1){perror(bind error);exit(1);}// 监听ret listen(lfd, 64);if(ret -1){perror(listen error);exit(1);}fd_set reads, tmp;FD_ZERO(reads);FD_SET(lfd, reads);int maxfd lfd;while(1){tmp reads;int ret select(maxfd1, tmp, NULL, NULL, NULL);if(ret -1){perror(select);exit(0);}if(FD_ISSET(lfd, tmp)){int cfd accept(lfd, NULL, NULL);FD_SET(cfd, reads);maxfd cfd maxfd ? cfd : maxfd;}for(int ilfd1; imaxfd; i){if(FD_ISSET(i, tmp)){char buf[1024];int len read(i, buf, sizeof(buf));if(len 0){printf(client say: %s\n, buf);write(i, buf, len);}else if(len 0){printf(客户端断开了连接\n);FD_CLR(i, reads);close(i);}else{perror(read);exit(0);}}}}return 0; }
http://www.zqtcl.cn/news/980994/

相关文章:

  • 泰州企业建站系统中企动力科技做什么的
  • 唐山公司网站建设 中企动力唐山宽带动态ip如何做网站访问
  • 个人商城网站怎么做电商网站及企业微信订烟
  • 温州市网站优化广告平面设计教程
  • 南通制作网站的有哪些公司吗sae 部署wordpress
  • 友情链接对网站的影响wordpress admin init
  • 渭南网站开发做网红用哪个网站
  • 湖北建设网站wordpress 翻页电子书
  • 网站设计命名规范厦门建站比较好的公司
  • 用vs2010做网站登入前端培训费用大概多少郑州
  • 网站建设后的效果评估杭州网站制作公司
  • 3网站建设公司影楼修图用什么软件
  • 手机网站的内容模块多用户商城开源左
  • 库尔勒网站建站宝盒合作
  • 五河网站建设哪家好wordpress获取文章作者
  • 怎么修改网站内容wordpress ajax接口
  • 绵阳市城乡建设和规划局网站重庆网站建设公司有哪些
  • 宿迁网站建设公司排名展厅设计企业
  • 做家具定制的设计网站开阿里巴巴网站建设流程
  • 站长统计软件广州免费核酸在哪里做
  • 做soho一定要做网站吗在百度网站备案查询上显示未备案是什么意思
  • 移动公司营销网站设计html旅游网站模板
  • 专业生产车间设计图纸网站ui设计师证
  • 如何建网站教程视频10种网络营销方法
  • 网站内链优化的角度wordpress缓存插件破解版
  • 南宁网站建设哪个好天津网站建设咨询
  • 网站开发常用中间件计算机语言python
  • 学习html5的网站软件系统开发怎样容易
  • 做企业网站用什么华为弹性云服务器创建wordpress
  • 重庆手机网站开发网站建设的条件是什么