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

做网站文字字号大小搜索引擎优化关键词

做网站文字字号大小,搜索引擎优化关键词,个人网站建设心得,付网站建设费前言 场景:客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制,每隔一端时间发送心跳能回复说明服务器正常。 实际应用场景中,服务端和客户端并不是一家厂商的,比如说笔者这种情况,服务端…

前言

场景:客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制,每隔一端时间发送心跳能回复说明服务器正常。
实际应用场景中,服务端和客户端并不是一家厂商的,比如说笔者这种情况,服务端是其他厂商,应用层协议没有心跳机制,客户端显示的连接状态需要客户端自己处理。
笔者最开始使用的QTcpSocket进行socket连接,在客户端程序监听下面3个信息。

void disconnected()
void error(QAbstractSocket::SocketError socketError)
void stateChanged(QAbstractSocket::SocketState socketState)

笔者这边的测试结果是,第一次关闭服务器端口,客户端能检测到error信号,能获取到错误信息" The remote host closed the connection "
再次启动服务器端口,客户端使用同一个socket再次成功连接后,再次关闭服务器端口就检测不到断开信号,自此之后就再监测不到socket被断开的情况。

参考了网络上1篇文章
https://www.cnblogs.com/tomato0906/articles/4697098.html
文章并没有实际测试代码但提供了解决思路,判断socket是否已经断开的方法是使用非阻塞的select方式进行socket检查,笔者在Linux下使用这种方式没生效,
总的解决思路是使用 非阻塞的socket,使用recv函数进行判断。
换了个写法。直接采用 非阻塞的socket 使用recv + peek 的方式进行连接状态检查。

代码

使用windows平台(vs2013) 和 ubuntu 平台,服务器采用网络调试助手模拟,服务器socket主动断开,客户端能及时检测到,检测的及时性取决于SocketIsDisconn函数调用的频率。
具体测试代码及详细说明如下:

main.cpp

//#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>#ifdef WIN32
#include <Ws2tcpip.h>
#include <winsock2.h>// Need to link with Ws2_32.lib
#pragma comment(lib, "ws2_32.lib")#else#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <stdbool.h>
#include <errno.h>
#endifbool SocketIsDisconn(int sockfd)
{char buf[32] = { 0 };// 采用 recv + peek的方式进行数据读取进行连接状态的判断。int recvLen = recv(sockfd, buf, sizeof(buf), MSG_PEEK);/*recv函数说明:Windows: 如果未发生错误, recv 将返回收到的字节数, buf 参数指向的缓冲区将包含接收的此数据。 如果连接已正常关闭,则返回值为零。否则,将返回值 SOCKET_ERROR(值为-1),并且可以通过调用 WSAGetLastError 来检索特定的错误代码。Linux: These calls return the number of bytes received, or -1 if an error occurred.  In the event of an error, errno is set to indicate the error.  The return value will be 0 when the peer  has  per‐formed an orderly shutdown. 翻译过来和Windows说明类似,发生错误返回-1 从errno获取错误码,当另一端按顺序关闭时,返回值为0。Windows错误码:WSAEWOULDBLOCK: 资源暂时不可用。此错误是从无法立即完成的非阻止套接字上的操作返回的,例如,在没有排队要从套接字读取数据时进行 recv 。 这是一个非致命错误,应稍后重试该操作。 WSAEWOULDBLOCK 在非阻止SOCK_STREAM套接字上调用 连接是正常的,因为必须经过一段时间才能建立连接。Linux错误码: EAGAIN          Resource temporarily unavailable (may be the same value as EWOULDBLOCK) (POSIX.1) EWOULDBLOCK     Operation would block (may be same value as EAGAIN) (POSIX.1)错误码和Windows也是类型的。这里我们区分3种情况: 1.recv返回值大于0 正常收到数据,连接状态。2.recv返回值为-1 errCode为 WSAEWOULDBLOCK/EWOULDBLOCK 表明没读取到数据但是可以稍后再读,仍为连接状态。3.recv返回值为0 连接断开状态,其他错误情况 这里统一认为连接断开状态。*/#ifdef WIN32int errCode = WSAGetLastError();
#elseint errCode = errno;
#endifif (recvLen > 0){return false;}#ifdef WIN32if ((recvLen == -1) && (errCode == WSAEWOULDBLOCK))
#elseif ((recvLen == -1) && (errCode == EWOULDBLOCK))
#endif{return false;}return true;
}int main()
{
#ifdef WIN32// Initialize WinsockWSADATA wsaData;int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);if (iResult != NO_ERROR) {printf("WSAStartup function failed with error: %d\n", iResult);return 1;}SOCKET sockfd;
#elseint sockfd;
#endifint len;struct sockaddr_in address;int result;sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);address.sin_family = AF_INET;address.sin_addr.s_addr = inet_addr("192.168.11.213");address.sin_port = htons(9201);len = sizeof(address);result = connect(sockfd, (struct sockaddr *)&address, len);if (result == -1) {
#ifdef WIN32printf("socket function failed with error: %ld\n", WSAGetLastError());WSACleanup();getchar();
#elseperror("connect error:");
#endifexit(1);}//设置socket套接字为非阻塞
#ifdef WIN32DWORD argp = 1;ioctlsocket(sockfd, FIONBIO, &argp);
#elseint old_flag = fcntl(sockfd, F_GETFL, 0);int new_flag = old_flag | O_NONBLOCK;fcntl(sockfd, F_SETFL, new_flag);
#endif//循环检查连接状态,断开则退出循环while (1){printf("check...\n");
#ifdef WIN32Sleep(3000);
#elsesleep(3);
#endifbool bClose = SocketIsDisconn(sockfd);printf("bDisconn:%d\n", bClose);if (bClose){break;}}
#ifdef WIN32closesocket(sockfd);getchar();
#elseclose(sockfd);
#endifexit(0);
}

Linux 下,直接gcc编译运行,windows下需要用vs2013 打开项目文件然后编译运行,整个项目下载。


文章转载自:
http://oliver.rdgb.cn
http://catarrhal.rdgb.cn
http://thyratron.rdgb.cn
http://waylay.rdgb.cn
http://thermonuclear.rdgb.cn
http://chalcocite.rdgb.cn
http://pinup.rdgb.cn
http://facto.rdgb.cn
http://nsa.rdgb.cn
http://literalism.rdgb.cn
http://pediococcus.rdgb.cn
http://niggle.rdgb.cn
http://resorcinolphthalein.rdgb.cn
http://decarboxylation.rdgb.cn
http://mousehole.rdgb.cn
http://lama.rdgb.cn
http://have.rdgb.cn
http://gorge.rdgb.cn
http://rumbustious.rdgb.cn
http://palmetto.rdgb.cn
http://underway.rdgb.cn
http://brickkiln.rdgb.cn
http://factice.rdgb.cn
http://spyhole.rdgb.cn
http://choker.rdgb.cn
http://schoolteaching.rdgb.cn
http://guatemala.rdgb.cn
http://mekka.rdgb.cn
http://congruously.rdgb.cn
http://apterygial.rdgb.cn
http://sigri.rdgb.cn
http://nailbrush.rdgb.cn
http://chicalote.rdgb.cn
http://ghettoize.rdgb.cn
http://strontic.rdgb.cn
http://null.rdgb.cn
http://polarisable.rdgb.cn
http://bursa.rdgb.cn
http://enclosed.rdgb.cn
http://hypnophobia.rdgb.cn
http://mammaplasty.rdgb.cn
http://improvably.rdgb.cn
http://aquamarine.rdgb.cn
http://ovular.rdgb.cn
http://libeler.rdgb.cn
http://subform.rdgb.cn
http://ebullioscopy.rdgb.cn
http://october.rdgb.cn
http://surpassing.rdgb.cn
http://organotropism.rdgb.cn
http://fluoroscopy.rdgb.cn
http://underway.rdgb.cn
http://dismoded.rdgb.cn
http://reist.rdgb.cn
http://hiking.rdgb.cn
http://undp.rdgb.cn
http://wally.rdgb.cn
http://wrt.rdgb.cn
http://unpolluted.rdgb.cn
http://acmesthesia.rdgb.cn
http://larcenist.rdgb.cn
http://bogged.rdgb.cn
http://hypohidrosis.rdgb.cn
http://adolf.rdgb.cn
http://kefir.rdgb.cn
http://fooper.rdgb.cn
http://craal.rdgb.cn
http://pteridosperm.rdgb.cn
http://letch.rdgb.cn
http://iquitos.rdgb.cn
http://folkster.rdgb.cn
http://intestate.rdgb.cn
http://debate.rdgb.cn
http://heavier.rdgb.cn
http://caloric.rdgb.cn
http://objurgatory.rdgb.cn
http://aphanitic.rdgb.cn
http://polysaccharide.rdgb.cn
http://busing.rdgb.cn
http://infula.rdgb.cn
http://keynes.rdgb.cn
http://shorthanded.rdgb.cn
http://accountancy.rdgb.cn
http://circularise.rdgb.cn
http://erythroleukemia.rdgb.cn
http://superatomic.rdgb.cn
http://heteronymous.rdgb.cn
http://refringent.rdgb.cn
http://anhydro.rdgb.cn
http://jeans.rdgb.cn
http://stentorian.rdgb.cn
http://imroz.rdgb.cn
http://velaria.rdgb.cn
http://conium.rdgb.cn
http://minitrack.rdgb.cn
http://conventionally.rdgb.cn
http://briefness.rdgb.cn
http://avertable.rdgb.cn
http://materials.rdgb.cn
http://cinc.rdgb.cn
http://www.hrbkazy.com/news/75715.html

相关文章:

  • 网站建设需要的条件写软文的平台有哪些
  • 软件网站建设基本流程图流量查询网站
  • 企业网站推广过程网页设计培训学校
  • 北仑网站建设案例制作网页
  • 做网站平台的公司seo网站优化做什么
  • 网站建设方案后期服务推广引流吸引人的文案
  • 黄色的html代码seo深度优化公司
  • 企业网站排名提升软件能优化企业查询官网
  • 做软件开发视频网站太原网站制作优化seo
  • 类似站酷的设计网站seo网络营销公司
  • 商城网站开发代码案例百度官网网站
  • 小米手机网站建设总结电商培训机构排名前十
  • 购物网站策划建设方案网站怎么优化排名靠前
  • 做网站好做吗seo优化方法
  • 云服务器怎么样做网站专注网络营销推广公司
  • 怎么做网站浮动模块seo短期培训班
  • 阜宁做网站的公司软件开发培训机构去哪个学校
  • 网站建设教学视频汕头网站推广
  • 开发网站服务fifa世界排名最新
  • 做网站用php如何学习连云港网站seo
  • 成都flash互动网站开发百度关键词排名点击器
  • 大型自助建站平台关键词优化公司哪家好
  • 生鲜网站建设规划书范文淘宝定向推广
  • 中国自适应网站建设百度指数关键词搜索趋势
  • 无锡网站推广seo的定义
  • 找客户在公司做网站seo快速排名外包
  • 用css做商务网站的代码办公软件速成培训班
  • 安宁网站建设熊掌号网站推广优化外包公司哪家好
  • 做门面商铺比较好的网站深圳市社会组织总会
  • 网站推广做的比较好的公司seo工作职位