﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-学习、成长之路-随笔分类-VC</title><link>http://www.cppblog.com/sToa/category/11487.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 22 May 2012 16:49:45 GMT</lastBuildDate><pubDate>Tue, 22 May 2012 16:49:45 GMT</pubDate><ttl>60</ttl><item><title>咪兔中国象棋外挂</title><link>http://www.cppblog.com/sToa/archive/2012/05/22/175698.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Tue, 22 May 2012 02:10:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2012/05/22/175698.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/175698.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2012/05/22/175698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/175698.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/175698.html</trackback:ping><description><![CDATA[<span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">本软件是一款QQ游戏中国象棋辅助工具,能帮你自动下棋,有了他,你就是象棋特级大师了.</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><ignore_js_op style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; "><img id="aimg_16205" aid="16205" src="http://www.me2wg.com/data/attachment/forum/201203/03/153243ea6z8zz8vu288dka.png" zoomfile="data/attachment/forum/201203/03/153243ea6z8zz8vu288dka.png" file="data/attachment/forum/201203/03/153243ea6z8zz8vu288dka.png" width="267" inpost="1" alt="ui.png" title="ui.png" initialized="true" style="word-wrap: break-word; cursor: pointer; " />&nbsp;</ignore_js_op><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">使用说明:</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">* 下棋时打开</span><a href="http://www.me2wg.com/thread-28332-1-1.html" target="_blank" style="color: #336699; text-decoration: none; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: blue; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">咪兔中国象棋助手</a><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">,点单步他会帮你下一步棋,点自动则会帮你下完整盘棋</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">* "思考限时"用来控制助手智能,时间越长智能越高</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">助手特性:</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">* 同时支持QQ游戏中国象棋和新中国象棋</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">* 支持自定义AI引擎,同时支持UCI和UCCI协议</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">* 完全内存截取数据,精确控制</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="font-size: 13px; line-height: 19px; background-color: #ffffff; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">更新日志:</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">12:46 2012/3/6 v1.1.106</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">* 修复助手关闭时引擎进程未退出的问题</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">10:28 2012/3/4 v1.1.104</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">* 修复游戏版本自动匹配时的一处问题</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">15:06 2012/3/3 v1.1.103</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">+ 增加开局库支持(目前只支持兵河格式)</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">+ 兔币少于10或少于5时提示用户</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">+ 局时设置时,单步时间小于20秒,自动拒绝</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">* 在开启自动确认时自动拒绝和棋和悔棋</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; " /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">* 修复新中国象棋中有时不能自动确认的错误(支持连续测评)&nbsp;</span><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><br style="font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; " /><a href="http://www.me2wg.com/qqzgxq/v1/Me2QQZGXQv1.1.106Setup.exe" target="_blank" style="color: #336699; text-decoration: none; font-size: 13px; line-height: 19px; background-color: #ffffff; word-wrap: break-word; font-family: Tahoma, 'Microsoft Yahei', Simsun; ">下载咪兔象棋助手v1.1.106</a>&nbsp;&nbsp;<img src ="http://www.cppblog.com/sToa/aggbug/175698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2012-05-22 10:10 <a href="http://www.cppblog.com/sToa/archive/2012/05/22/175698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>咪兔连连看外挂</title><link>http://www.cppblog.com/sToa/archive/2012/05/22/175697.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Tue, 22 May 2012 02:10:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2012/05/22/175697.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/175697.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2012/05/22/175697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/175697.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/175697.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="0" style="word-wrap: break-word; empty-cells: show; border-collapse: collapse; table-layout: fixed; width: 757px; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 12px; line-height: 18px; "><tbody style="word-wrap: break-word; "><tr style="word-wrap: break-word; "><td id="postmessage_315222" style="word-wrap: break-word; font-size: 14px; "><strong style="word-wrap: break-word; font-weight: 700; "></strong><img id="aimg_Fugg0" width="272" height="145" src="http://www.me2wg.com/qqllk/1.jpg" border="0" alt="" style="word-wrap: break-word; cursor: pointer; " /><br style="word-wrap: break-word; " /><img id="aimg_YuEgl" width="480" height="320" src="http://www.me2wg.com/qqllk/2.jpg" border="0" alt="" style="word-wrap: break-word; cursor: pointer; " /><br style="word-wrap: break-word; " />咪兔连连看外挂<br style="word-wrap: break-word; " /><br style="word-wrap: break-word; " />免费的QQ游戏连连看辅助工具,全新的内核，精准定位，易用快速安全，玩家必备。<br style="word-wrap: break-word; " /><br style="word-wrap: break-word; " />支持最新的游戏版本2.0 Beta09 Build011,支持自动准备,禁止特效,无限道具,道具免疫,模拟真人以及单步,挂机,秒杀<br style="word-wrap: break-word; " /><br style="word-wrap: break-word; " /><a href="http://www.me2wg.com/qqllk/Me2QQLLKv1.0.11.zip" target="_blank" style="word-wrap: break-word; color: #336699; ">下载咪兔连连看外挂v1.0.11</a><br style="word-wrap: break-word; " /><br style="word-wrap: break-word; " /><a href="http://r.virscan.org/report/27717137d73d661454a85649759a1091.html" target="_blank" style="word-wrap: break-word; color: #336699; ">在线病毒检测报告</a></td></tr></tbody></table><img src ="http://www.cppblog.com/sToa/aggbug/175697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2012-05-22 10:10 <a href="http://www.cppblog.com/sToa/archive/2012/05/22/175697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>五子棋外挂,黑白棋外挂附源码</title><link>http://www.cppblog.com/sToa/archive/2011/03/29/142920.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Tue, 29 Mar 2011 03:23:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2011/03/29/142920.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/142920.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2011/03/29/142920.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/142920.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/142920.html</trackback:ping><description><![CDATA[<div id=me2wzq>
<div class=title><strong>咪兔QQ<strong>五子棋外挂</strong><span>v0.1.33</span></strong> </div>
<div class=pic><img alt=咪兔QQ五子棋外挂界面 src="http://www.me2wg.com/qqwzq/me2qqwzq.png"> </div>
<div class=intro>
<p>本软件是一款完全免费的QQ游戏<strong>五子棋外挂</strong>,有了他,你的对手将会郁闷一阵子了.<br>使用说明:下棋时打开助手,点"单步",助手会帮你下棋,点"自动"则会帮你下完整盘棋.</p>
</div>
<div class=downurl><a href="http://www.skycn.com/soft/65810.html#downUrlMap">天空软件站下载</a>|<a href="http://www.crsky.com/soft/25566.html">非凡软件站下载</a>|<a href="http://www.me2wg.com/qqwzq/ME2QQWZQ_v0.1.33.rar">本地下载</a> </div>
</div>
<br><br>
<div class=wgitem>
<div id=me2hbq>
<div class=title><strong>咪兔QQ黑白棋助手<span>v0.1.33</span></strong> </div>
<div class=pic><img alt=咪兔QQ黑白棋助手界面 src="http://www.me2wg.com/qqhbq/me2wghbq.png"> </div>
<div class=intro>
<p>本软件是一款完全免费的QQ游戏黑白棋辅助工具,不论你相信与否,本软件都将帮助你轻松战胜人类对手.<br>使用说明:下棋时打开助手,点"单步",助手会帮你下棋,点"自动"则会帮你下完整盘棋.</p>
</div>
<div class=downurl><a href="http://www.skycn.com/soft/65775.html#downUrlMap">天空软件站下载</a>|<a href="http://www.crsky.com/soft/25585.html">非凡软件站下载</a>|<a href="http://www.downg.com/soft/32264.html#down">绿软家园下载</a>|<a href="http://www.me2wg.com/qqhbq/Me2QQHBQ_v0.1.33.rar">本地下载</a>|<a href="http://www.me2wg.com/qqhbq/me2wg_src110321.rar">源码下载</a> </div>
</div>
</div>
<img src ="http://www.cppblog.com/sToa/aggbug/142920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2011-03-29 11:23 <a href="http://www.cppblog.com/sToa/archive/2011/03/29/142920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个不太通用的PE感染方法 </title><link>http://www.cppblog.com/sToa/archive/2010/01/27/106524.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Wed, 27 Jan 2010 05:38:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2010/01/27/106524.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/106524.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2010/01/27/106524.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/106524.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/106524.html</trackback:ping><description><![CDATA[原理:<br>修改入口点代码为病毒体代码,病毒体代码在运行后修复原入口点代码并执行.<br><br>感染过程:<br>1.备份原PE文件入口点代码(病毒体大小)到文件尾部<br>2.用病毒体代码覆盖入口代码<br><br>执行过程:<br>1.执行用户自定义代码<br>2.复制修复代码到动态申请的内存中<br>3.执行修复代码修复原入口<br>4.跳转到原入口运行<br><br>问题:<br>1.感染有重定位表的PE文件时,病毒代码可能被系统PE加载器修改<br>2.入口点到入口点所在节尾部大小小于病毒体大小时,文件会损坏<br>3.感染upx壳压缩过的文件会出错<br><br>代码请使用VC6&nbsp;Release方式编译．．<br><br>注：本文中的代码有一定的破坏性，请勿用于非法用途，否则一切后果自负 <br><br><a href="http://www.cppblog.com/Files/sToa/TestPEInject.rar">/Files/sToa/TestPEInject.rar</a>
<img src ="http://www.cppblog.com/sToa/aggbug/106524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2010-01-27 13:38 <a href="http://www.cppblog.com/sToa/archive/2010/01/27/106524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]轻量级数据存储方法总结</title><link>http://www.cppblog.com/sToa/archive/2009/11/26/101987.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Thu, 26 Nov 2009 09:29:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2009/11/26/101987.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/101987.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2009/11/26/101987.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/101987.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/101987.html</trackback:ping><description><![CDATA[<p>原文<a href="http://www.uieasy.com/cn/blog/?p=13">http://www.uieasy.com/cn/blog/?p=13</a><br><br>最近在想一些存储数据的问题，Window平台下数据存储方式可用的方法总结有一下几种：<br>1）.ini文件方式，这种方式主要存储配置文件类似的数据。VC中提供相应的函数来读取和存储ini文件数据。其按照section的方式来分类存储信息。<br>比较适合用来存储配置，列表类信息，前提是数据量比较小。<br>2）XML文件存储方式。XML丰富的表述能力和平台兼容能力已经成为当前程序开发的首选。很多复杂的配置文件都采用这种方式。其可以适用于存储数据量中等，数据描述较为复杂的存储。<br>当前的XML解析工具很多，但对于只是简单的将XML应用于文件存储工具。<a href="http://www.firstobject.com/">www.firstobject.com</a>的<br>CMarkup应该可以搞定了，它只有一个markup类来，现在被认为是最简单，最高效的解析工具。另一个c++ xml praser是tinyxml，sourceforge.ne上的开源项目，链接：<a href="http://sourceforge.net/projects/tinyxml">http://sourceforge.net/projects/tinyxml</a><br>3）SQLite是一个mini数据库，支持常用的SQL查询语句。与mysql等大型数据库相比，其特点估计都是mini了，且在数据量小的时候性能和mysql差不多，一般适用其存储十万级以下的数据。Sqlite<br>作为开源项目收到很广泛的支持。目前在window平台等到很好的支持，有ado.net方面的驱动，在VC下也有很好的支持。其特点是相对的高性能和高存储量。<br></p>
<img src ="http://www.cppblog.com/sToa/aggbug/101987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2009-11-26 17:29 <a href="http://www.cppblog.com/sToa/archive/2009/11/26/101987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>批量修改文件时间工具及源码</title><link>http://www.cppblog.com/sToa/archive/2009/10/10/98222.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Sat, 10 Oct 2009 03:17:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2009/10/10/98222.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/98222.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2009/10/10/98222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/98222.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/98222.html</trackback:ping><description><![CDATA[<p><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/stoa/sshot-6.png" width=486 height=351></p>
<a href="http://www.cppblog.com/Files/sToa/ReFileTime_src.rar">/Files/sToa/ReFileTime_src.rar</a> 
<img src ="http://www.cppblog.com/sToa/aggbug/98222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2009-10-10 11:17 <a href="http://www.cppblog.com/sToa/archive/2009/10/10/98222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小经验</title><link>http://www.cppblog.com/sToa/archive/2009/09/27/97368.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Sun, 27 Sep 2009 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2009/09/27/97368.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/97368.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2009/09/27/97368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/97368.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/97368.html</trackback:ping><description><![CDATA[1.VC错误信息：Creating browse info file...&nbsp; Error spawning bscmake.exe<br>解决方法：在环境变量Executable files中添加VC的可执行文件路径，如：D:\PROGRAM FILES\VCLITE\VC98\BIN。<br>注：我这个问题出现在配置VC6编译驱动程序的过程中..<br><br>2.在VMWare中的XP里运行Dbgview死机<br>解决方法：将Dbgview复制到非中文路径下运行<br><br>
<img src ="http://www.cppblog.com/sToa/aggbug/97368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2009-09-27 15:24 <a href="http://www.cppblog.com/sToa/archive/2009/09/27/97368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>删除指定网站的IE缓存文件</title><link>http://www.cppblog.com/sToa/archive/2009/08/17/93567.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Mon, 17 Aug 2009 03:00:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2009/08/17/93567.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/93567.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2009/08/17/93567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/93567.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/93567.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">BOOL&nbsp;CleanUrlCache(LPSTR&nbsp;lpUrl)<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LPINTERNET_CACHE_ENTRY_INFO&nbsp;lpICEI&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hFind&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FindFirstUrlCacheEntry(NULL,&nbsp;NULL,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwSize);<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(hFind&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;GetLastError()&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;ERROR_INSUFFICIENT_BUFFER)<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;lpICEI&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(LPINTERNET_CACHE_ENTRY_INFO)</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[dwSize];<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;hFind&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FindFirstUrlCacheEntry(NULL,&nbsp;lpICEI,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwSize);<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(hFind&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;lpICEI;<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(StrStrI(lpICEI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">lpszSourceUrlName,&nbsp;lpUrl))<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;bRet&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DeleteUrlCacheEntry(lpICEI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">lpszSourceUrlName);<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;lpICEI;<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpICEI&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">FindNextUrlCacheEntry(hFind,&nbsp;NULL,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwSize)&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;GetLastError()&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;ERROR_INSUFFICIENT_BUFFER)<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpICEI&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(LPINTERNET_CACHE_ENTRY_INFO)</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[dwSize];<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(FindNextUrlCacheEntry(hFind,&nbsp;lpICEI,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwSize));<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(lpICEI&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;NULL)<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;lpICEI;<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<img src ="http://www.cppblog.com/sToa/aggbug/93567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2009-08-17 11:00 <a href="http://www.cppblog.com/sToa/archive/2009/08/17/93567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>封装一个跨进程缓存类</title><link>http://www.cppblog.com/sToa/archive/2009/08/16/93486.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Sun, 16 Aug 2009 05:41:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2009/08/16/93486.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/93486.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2009/08/16/93486.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/93486.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/93486.html</trackback:ping><description><![CDATA[<p>最近做一个项目，需要记录系统里每个进程访问的IP及Port,然后提交到服务端进行分析，我的思路是用一个缓存文件记录所有进程访问网络的信息，然后在主程序中提取记录再提交。<br>这里面涉及到多进程访问同一个缓存文件的同步问题，于是封装了下面这个类，自我感觉良好，拿出来和大家分享 :)<br><br>* 使用类似于环形链表的机制来保证运行效率</p>
<br>测试程序如下:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">RecodeLog.cpp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">#pragma&nbsp;pack(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;测试用结构，可自定义，结构中不应该包涵指针类型</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">typedef&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;_tagTestInfo<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;nTest;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;szTest[</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">}TESTINFO,&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">PTESTINFO;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">#pragma&nbsp;pack()<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">ULONG&nbsp;WINAPI&nbsp;TestThread(PVOID&nbsp;pParam)<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;TESTINFO&nbsp;ti;&nbsp;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CRecodeLog</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">TESTINFO</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">prl&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CRecodeLog</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">TESTINFO</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TestRL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\trl.dat</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ti.nTest&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itoa(i,&nbsp;ti.szTest,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;可在任意进程或线程中调用该方法，不用考虑同步问题</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prl</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">AddLog(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ti);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;写入到缓冲文件中</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;prl;<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;开两个线程，每个线程增加100条记录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hThread,&nbsp;hThread2;<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;hThread&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateThread(NULL,&nbsp;NULL,&nbsp;TestThread,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL);<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;hThread2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateThread(NULL,&nbsp;NULL,&nbsp;TestThread,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL);<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WaitForSingleObject(hThread,&nbsp;INFINITE);<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WaitForSingleObject(hThread2,&nbsp;INFINITE);<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hThread);<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hThread2);<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CRecodeLog</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">TESTINFO</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">prl&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CRecodeLog</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">TESTINFO</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TestRL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\trl.dat</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;TESTINFO&nbsp;getTi;&nbsp;<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ncount&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(prl</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetTop(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">getTi))&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;取最顶部的缓存记录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d--%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;getTi.nTest,&nbsp;getTi.szTest);<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prl</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">DelTop();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;删除最顶端的缓存记录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ncount</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;ncount);<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;prl;<br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<br>从运行结果可以看到主线程读取到的记录是乱序的，但没有丢失的记录。。<br><br>下载示例代码<a href="http://www.cppblog.com/Files/sToa/TestCache.rar">/Files/sToa/TestCache.rar</a> 
<img src ="http://www.cppblog.com/sToa/aggbug/93486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2009-08-16 13:41 <a href="http://www.cppblog.com/sToa/archive/2009/08/16/93486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>封装一个TCP服务端(IOCP)与客户端</title><link>http://www.cppblog.com/sToa/archive/2009/08/13/93145.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Thu, 13 Aug 2009 03:21:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2009/08/13/93145.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/93145.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2009/08/13/93145.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/93145.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/93145.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>本代码服务端引用了<a href="http://www.codeproject.com/KB/IP/IOCP_how_to_cook.aspx">http://www.codeproject.com/KB/IP/IOCP_how_to_cook.aspx</a>中的代码，并作了少量修改，在这里对原作者表示感谢。。</p>
<p>功能描述：<br>* 封装了心跳机制<br>* 封装了一层应用层协议，支持压缩传输<br>* Client端封装了掉线重连机制<br><br></p>
<p>示例代码演示了文件传输并输出传输速度<br>希望朋友们能不吝指教，帮助我进步 :)<br><br><a title=点击下载源码 href="http://www.cppblog.com/Files/sToa/SSocket.rar">点击下载源码</a><br><br>服务端：&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CMyTcpServer&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CFTcpServer&nbsp;&nbsp;<br>{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;CMyTcpServer();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CMyTcpServer();<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;BOOL&nbsp;OnReadF(SCSocket&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pSocket,&nbsp;PBYTE&nbsp;pData,&nbsp;DWORD&nbsp;dwLen)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;DWORD&nbsp;btCount&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;DWORD&nbsp;dwTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetTickCount();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;DWORD&nbsp;lastTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dwTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btCount&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;dwLen;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;&nbsp;&nbsp;&nbsp;hFile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateFile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\abc.dat</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;GENERIC_WRITE,&nbsp;FILE_SHARE_WRITE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;OPEN_ALWAYS,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetFilePointer(hFile,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;FILE_END);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwBytesWrite&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteFile(hFile,&nbsp;pData,&nbsp;dwLen,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwBytesWrite,&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hFile);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwTTT&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetTickCount();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(dwTTT&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;lastTime&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dwTTT;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%dkb/s&nbsp;%u\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)(((</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">)btCount)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;(dwTTT&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;dwTime)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">),&nbsp;btCount);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;OnConnected(SCSocket&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pSocket){</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE};<br>};<br><br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CMyTcpServer::InitSocketLib();<br>&nbsp;&nbsp;&nbsp;&nbsp;CMyTcpServer&nbsp;ts;<br>&nbsp;&nbsp;&nbsp;&nbsp;ts.Start(</span><span style="COLOR: #000000">9908</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">5000</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">150000</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">_kbhit()&nbsp;)&nbsp;::Sleep(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;ts.Stop();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<p>&nbsp;&nbsp;客户端：&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CMyTcpClient&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CFTcpClient&nbsp;&nbsp;<br>{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;CMyTcpClient();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CMyTcpClient();<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;VOID&nbsp;OnConnected()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;buff[BUFF_SIZE_C&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;&nbsp;&nbsp;&nbsp;hFile;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hFile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateFile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\abc.dat</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;GENERIC_READ,&nbsp;FILE_SHARE_READ,&nbsp;NULL,&nbsp;OPEN_EXISTING,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;nNumberOfBytesRead&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;pos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(ReadFile(hFile,&nbsp;buff,&nbsp;BUFF_SIZE_C&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nNumberOfBytesRead,&nbsp;NULL))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(BUFF_SIZE_C&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;nNumberOfBytesRead)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send(buff,&nbsp;nNumberOfBytesRead);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hFile);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send(buff,&nbsp;nNumberOfBytesRead,&nbsp;TRUE);<br>&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;OnReadF(LPSTR&nbsp;pData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nSize)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>};<br><br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CMyTcpClient::InitSocketLib();<br>&nbsp;&nbsp;&nbsp;&nbsp;CMyTcpClient&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pcl&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CMyTcpClient;<br>&nbsp;&nbsp;&nbsp;&nbsp;pcl</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Start(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">192.168.1.138</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">9908</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">_kbhit()&nbsp;)&nbsp;::Sleep(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<p>&nbsp;</p>
<p><a title=源码下载 href="http://www.cppblog.com/Files/sToa/SSocket.rar"><br></a>&nbsp;</p>
<br>
<img src ="http://www.cppblog.com/sToa/aggbug/93145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2009-08-13 11:21 <a href="http://www.cppblog.com/sToa/archive/2009/08/13/93145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计算单条机器指令长度</title><link>http://www.cppblog.com/sToa/archive/2009/07/31/91787.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Fri, 31 Jul 2009 04:06:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2009/07/31/91787.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/91787.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2009/07/31/91787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/91787.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/91787.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原链接：http://bbs.pediy.com/showthread.php?t=63212&amp;highlight=Hook+Api+lib稍微改了一下//&nbsp;OpCode.h#if&nbsp;!defined(AFX_OPCODE_H__B8F7B840_D73F_461E_B08A_0202DD397B15__INCLUDED_)#define&nbsp;AFX_OPCOD...&nbsp;&nbsp;<a href='http://www.cppblog.com/sToa/archive/2009/07/31/91787.html'>阅读全文</a><img src ="http://www.cppblog.com/sToa/aggbug/91787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2009-07-31 12:06 <a href="http://www.cppblog.com/sToa/archive/2009/07/31/91787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>俄罗斯方块(自动玩)</title><link>http://www.cppblog.com/sToa/archive/2009/07/25/91136.html</link><dc:creator>sToa</dc:creator><author>sToa</author><pubDate>Sat, 25 Jul 2009 08:05:00 GMT</pubDate><guid>http://www.cppblog.com/sToa/archive/2009/07/25/91136.html</guid><wfw:comment>http://www.cppblog.com/sToa/comments/91136.html</wfw:comment><comments>http://www.cppblog.com/sToa/archive/2009/07/25/91136.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/sToa/comments/commentRss/91136.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sToa/services/trackbacks/91136.html</trackback:ping><description><![CDATA[<p>这个程序是2004年初学编程时的作品,当时是凭着一种现在看来都有些钦佩自己的激情下作出的,感谢俄罗斯方块带我入门.<br>这个程序虽然简陋,代码也混乱,Ai智能也不高,但也算完整,希望对俄罗斯方块程序有兴趣的朋友有所帮助 :)<br><img height=575 alt="" src="http://www.cppblog.com/images/cppblog_com/stoa/1.JPG" width=505 border=0><br><a href="http://www.cppblog.com/Files/sToa/20040607tetris.rar">/Files/sToa/20040607tetris.rar</a><br><a href="http://www.cppblog.com/Files/sToa/sztetris20040926_SRC.rar">/Files/sToa/sztetris20040926_SRC.rar</a></p>
<img src ="http://www.cppblog.com/sToa/aggbug/91136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sToa/" target="_blank">sToa</a> 2009-07-25 16:05 <a href="http://www.cppblog.com/sToa/archive/2009/07/25/91136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>