上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 17 下一页

2013年1月28日

使用TCP keepalive还是HeartBeat心跳包?

摘要: 对于TCP长连接,需要“保活”机制。可以在上层协议中自己实现“心跳包”,也可以使用TCP底层自身的Keepalive机制。这两种方式采用哪种更好呢?这里贴一下一位网友的回帖,我觉得说的不错。“套接字本身是有一套心跳保活机制的(TCP Keepalive),不过默认的设置并不像我们一厢情愿的那样有效。在双方TCP套接字建立连接后(即都进入ESTABLISHED状态)并且在两个小时左右上层没有任何数据传输的情况下,这套机制才会被激活。很多人认为两个小时的时间设置得很不合理。为什么不设置成为10分钟,或者更短的时间?(可以通过SO_KEEPALIVE选项设置。)但是这样做其实并不被推荐。实际上这套机 阅读全文

posted @ 2013-01-28 17:21 zhuyf87 阅读(1862) 评论(0) 推荐(0) 编辑

WinSock TCP keepalive的机理及使用

摘要: 原文地址:http://blog.csdn.net/silvervi/article/details/6031975TCP 是面向连接的 , 在实际应用中通常都需要检测对端是否还处于连接中。如果已断开连接,主要分为以下几种情况:1. 连接的对端正常关闭,即使用 closesocket 关闭连接。2. 连接的对端非正常关闭,包括对端异常关闭,网络断开等情况。对于第一种情况,很好判断,但是对于第二种情况,可能会要麻烦一些。在网上找到了一些文章,大致有以下两种解决方法:自己编写心跳包程序简单的说也就是在自己的程序中加入一条线程,定时向对端发送数据包,查看是否有 ACK ,如果有则连接正常,没有的话则 阅读全文

posted @ 2013-01-28 16:12 zhuyf87 阅读(946) 评论(0) 推荐(0) 编辑

闲说HeartBeat心跳包和TCP协议的KeepAlive机制

摘要: 原文地址:http://www.felix021.com/blog/read.php?2076很多应用层协议都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据。使用心跳包的典型协议是IM,比如QQ/MSN/飞信等协议。学过TCP/IP的同学应该都知道,传输层的两个主要协议是UDP和TCP,其中UDP是无连接的、面向packet的,而TCP协议是有连接、面向流的协议。所以非常容易理解,使用UDP协议的客户端(例如早期的“OICQ”,听说OICQ.com这两天被抢注了来着,好古老的回忆)需要定时向服务器发送心跳包,告诉服务 阅读全文

posted @ 2013-01-28 13:17 zhuyf87 阅读(501) 评论(0) 推荐(0) 编辑

Winsock 套接字模式

摘要: 阻塞模式在阻塞模式下,I/O操作完成之前,Winsock调用会一直等待,不会立即返回。Winsock应用程序通常是遵照“生产者-消费者”模型,应用程序需要读取(或写入)指定数量的字节,然后以该数据为基础执行计算。SOCKET sock;char buff [256];int done = 0;…while (!done){ nBytes = recv(sock, buff, 65); if (nBytes == SOCKET_ERROR) { printf(“recv failed with error %d \n”, WSAGetLastError()); ... 阅读全文

posted @ 2013-01-28 10:29 zhuyf87 阅读(977) 评论(0) 推荐(0) 编辑

2013年1月27日

Winsock IO方法

摘要: Winsock分别提供了套接字模式和套接字I/O模型。套接字模式用于决定Winsock函数随套接字调用的行为,套接字模型描述了一个应用程序如何对套接字上的I/O进行管理及操作。套接字模式包含:阻塞模式和非阻塞模式。所有的Windows平台都支持这两种模式。I/O模型有助于应用程序通过某种异步方式,一次对一个或多个套接字上进行的通信加以管理。这些模型包括Non-blocking select(选择)、WSAAsyncSelect(异步选择)、WSAEventSelect(事件选择)、Overlapped I/O(重叠I/O)、Completion port(完成端口)。Windows CE系统仅 阅读全文

posted @ 2013-01-27 20:43 zhuyf87 阅读(365) 评论(0) 推荐(0) 编辑

2013年1月26日

分享WinCE钩子封装库

摘要: 在最近的项目中,需要使用WinCE的键盘钩子。具体是勾住WinCE终端的扫描按键。翻出自己以前的旧程序,重新封装了一下。现在分享出来,如果大家的项目中也需要用到键盘钩子或者鼠标钩子,又不想在这上面花费太多时间的话,假如你搜索到了这个帖子,不妨试用一下我封装的这个。CeHook.dll导出6个函数:#ifndef _CE_HOOK_H_#define _CE_HOOK_H_#define DLLCEHOOK_API __declspec(dllexport)#define WM_HOOK_MOUSE WM_USER + 101#define WM_HOOK_KEYDOWN ... 阅读全文

posted @ 2013-01-26 19:03 zhuyf87 阅读(818) 评论(3) 推荐(1) 编辑

2013年1月25日

WinCE键盘钩子与鼠标钩子

摘要: 最近需要在Windows CE 5.0操作系统下实现这样的功能:如果没有点击屏幕,则等待5秒钟后自动调暗背光。一旦屏幕有输入,则自动调亮背光。调节背光的功能,已经在底层做好了,可以通过接口函数来调节。剩下的问题就是感应这个屏幕点击,就想到了鼠标钩子。道理很简单,当有鼠标消息发生时,操作系统先交给我的钩子过程,等我用完了,再交给钩子链中的下一个钩子或者目标窗口。不过诸如:SetWindowsHookEx,CallNextHookEx,UnhookWindowsHookEx这些函数在Windows CE下都没有提供。微软的MSDN说Windows CE不支持钩子,特别失望。不过还是去google了 阅读全文

posted @ 2013-01-25 14:20 zhuyf87 阅读(3539) 评论(1) 推荐(0) 编辑

2013年1月24日

代码整洁之道 - 有意义的命名

摘要: 1. 名副其实好的命名会体现出它为什么会存在、它做什么事、应该怎么用。如果名称需要注释来补充,就不算名副其实。int d; // 消逝的时间,以日统计名称d没有体现出时间消逝的感觉,更体现不出“以日统计”。可以替换如下:int elapsedTimeInDays;int daysSinceCreation;int daysSinceModification;int fileAgeInDays;再看下面的if判断:if (status == 1) { … }这里的数字1,无法看出它究竟代表什么意思,称为魔数。应该用有意义的名称代替。if(status == FLAGGED) { … }2. 避免 阅读全文

posted @ 2013-01-24 17:32 zhuyf87 阅读(1104) 评论(0) 推荐(0) 编辑

2013年1月22日

c++ 字面值常量

摘要: 字面值常量(literal constant),“字面值”是指只能用它的值称呼它,“常量”是指其值不能修改。每个字面值都有相应的类型,3.14是double型,2是int型。只有内置类型存在字面值。1. 整形字面值规则整形字面值常量可以用十进制、八进制、十六进制表示。20 // dec024 // oct(以0开头)0x14 // hex(以0x或0X开头)整形字面值常量的类型默认为int或long,其值适合int就是int类型,比int大就是long类型。在数值后加L或l(小写字母l容易与数字1混淆,建议用L)可以指定为long,加U或u指定为unsigned类型,加UL或LU定义为unsi 阅读全文

posted @ 2013-01-22 17:21 zhuyf87 阅读(7079) 评论(0) 推荐(0) 编辑

2013年1月21日

学之者生,用之者死——ACE历史与简评

摘要: 原文地址:http://www.cnblogs.com/Solstice/archive/2010/03/10/ace_history.html学之者生,用之者死——ACE历史与简评陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice2010 March 10ACE 是现代面向对象网络编程的鼻祖,确立了许多重要模式,如 Reactor、Acceptor 等,重要到我们甚至觉得网络编程就应该是那样的。但为什么 ACE 叫好不叫座?大名鼎鼎却使用者寥寥?本文谈谈我的个人观点。ACE 是一套重量级的 C++ 网络库,早期版本由 Douglas Schmidt 独 阅读全文

posted @ 2013-01-21 12:10 zhuyf87 阅读(382) 评论(0) 推荐(0) 编辑

上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 17 下一页

导航