﻿<?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++博客-长寿梦的编程手记-随笔分类-网络开发基础</title><link>http://www.cppblog.com/changshoumeng/category/13748.html</link><description>从事工作涉及各种主流编程语言，未来期望使用这些利器，投入到某一专业领域，近期对机器学习与数据挖掘感兴趣。</description><language>zh-cn</language><lastBuildDate>Fri, 14 Oct 2016 20:17:14 GMT</lastBuildDate><pubDate>Fri, 14 Oct 2016 20:17:14 GMT</pubDate><ttl>60</ttl><item><title>GCC -O 优化选项的一次测试</title><link>http://www.cppblog.com/changshoumeng/archive/2016/10/14/214332.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 14 Oct 2016 03:48:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/10/14/214332.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214332.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/10/14/214332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214332.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214332.html</trackback:ping><description><![CDATA[<table style="border-collapse:collapse;width:672.7000pt;"><tbody><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: 宋体; font-size: 7.5pt;">GCC -O 优化选项说明</span></p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">编译耗时</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">编译结果大小</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">(BYTES)</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">运行耗时</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">不设置O选项</span></p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m20.079s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m18.943s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m1.030s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">1590048</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m13.143s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m12.996s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.124s</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O0：这个等级（字母&#8220;O&#8221;后面跟个零）关闭所有优化选项，也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码，这通常不是我们想要的。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m19.957s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m18.521s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m1.406s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">1590048</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m12.816s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m12.661s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.138s</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O1：这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的，但一般这些任务肯定能顺利完成。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m22.782s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m21.750s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.978s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">599306</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m5.074s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.951s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.115s</span></p><p>&nbsp;</p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O2：-O1的进阶。这是推荐的优化等级，除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后，编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m26.258s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m25.313s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.887s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">594456</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.621s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.491s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.123s</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O3：这是最高最危险的优化等级。用这个选项会延长编译代码的时间，并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x，-O3生成的代码也只是比-O2快一点点而已，而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件，大大增加编译失败的机会或不可预知的程序行为（包括错误）。这样做将得不偿失，记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m29.642s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m28.671s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.852s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">659664</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.669s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.521s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.141s</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: 宋体; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O4 </span><span style="font-family: 宋体; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">等价于</span><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O3</span></p><p><span style="font-family: 宋体; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O5 等价于</span><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O3</span></p><p><span style="font-family: 宋体; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">....</span></p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m30.264s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m29.236s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.969s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">659664</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.481s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.331s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.144s</span></p><p>&nbsp;</p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-Os：这个等级用来优化代码尺寸。其中启用了-O2中不会增加磁盘空间占用的代码生成选项。这对于</span><strong><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">磁盘空间极其紧张或者CPU缓存较小的机器</span></strong><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">非常有用。但也可能产生些许问题，因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m24.206s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m23.285s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.855s</span></p><p>&nbsp;</p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">519903</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m5.188s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m5.050s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.132s</span></p></td></tr></tbody></table><img src ="http://www.cppblog.com/changshoumeng/aggbug/214332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-10-14 11:48 <a href="http://www.cppblog.com/changshoumeng/archive/2016/10/14/214332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于自己写linux c++的网络服务的tps上限的一次不严格的测试</title><link>http://www.cppblog.com/changshoumeng/archive/2015/01/20/209593.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Tue, 20 Jan 2015 09:41:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/01/20/209593.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209593.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/01/20/209593.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209593.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209593.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12px;">测试机： amd 两核心 ，客户端与服务端都在本机上跑。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">网络层：A类epoll线程处理accept的被动连接；</span></div><div><span style="font-size: 12px;">B类epoll线程处理connect的主动连接；</span></div><div><span style="font-size: 12px;">C类epoll线程把A或B类epoll线程得到的连接分配到某个线程，专门处理send和recv操作；</span></div><div><span style="font-size: 12px;">D类线程池处理C类抛出来的数据，处理完之后，再投递到C类线程做send操作。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">用ab测试短连接</span></div><div><span style="font-size: 12px;">ab -n 1000 -c 150 http://127.0.0.1:8090/</span></div><div><span style="font-size: 12px;">测试20次之后，得到一个峰值tps=6000</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">用字节的写的基于数据echo测试的压力测试程序测试长连接：</span></div><div><span style="font-size: 12px;">client发出64字节数据，echosvrd返回64字节，client又发出64字节。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">每次传输网络传输数据在64字节以下的情况下：&nbsp;</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 100 &nbsp; &nbsp;得到tps=13851</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 1000 &nbsp; 得到tps=16641</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 10000 &nbsp;得到tps=16600 service cpu跑到90%，始终在90%以下；stree_client的cpu跑到32%左右；</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 20000 &nbsp;stree_client的cpu跑到100%告终</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 15000 &nbsp;stree_client的cpu跑到100%告终</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">把日志的输出级别调到1，此时基本无日志输出：</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 10000 &nbsp;得到tps=29436 service cpu跑到70%；stree_client的cpu跑到48%左右；</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 15000 &nbsp;stree_client的cpu跑到100%告终</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">再把网络传输的字节调整为128字节左右：</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 10000 &nbsp;得到tps=29179 service cpu跑到68%；stree_client的cpu跑到45%左右；</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">结论：</span></div><div><span style="font-size: 12px;">在本机测试，就忽略了网络io时延，得到网络引擎cpu跑到100%时的tps是 不超过30000，或者不偏离30000很远，</span></div><div><span style="font-size: 12px;">此时并发连接数在10000</span></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/209593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-01-20 17:41 <a href="http://www.cppblog.com/changshoumeng/archive/2015/01/20/209593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于selec的网络io，linux c++实现</title><link>http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sun, 30 Nov 2014 04:06:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/208988.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/208988.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/208988.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 因为要在服务内集成一个提供状态数据的http监控服务，而封装的一个select io#include&nbsp;&lt;sys/types.h&gt;#include&nbsp;&lt;sys/socket.h&gt;#include&nbsp;&lt;netinet/in.h&gt;#include&nbsp;&lt;arpa/inet.h&gt;#include&nbsp;&lt;assert...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/208988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2014-11-30 12:06 <a href="http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>装scipy或者numpy时弹出python2.7 was not found in the registry 的解决办法: python的注册与注销方法</title><link>http://www.cppblog.com/changshoumeng/archive/2014/07/31/207877.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 31 Jul 2014 12:56:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2014/07/31/207877.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/207877.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2014/07/31/207877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/207877.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/207877.html</trackback:ping><description><![CDATA[参考链接：<br /><a href="http://lijunwei1228ok.blog.163.com/blog/static/9738379720140231713138/">http://lijunwei1228ok.blog.163.com/blog/static/9738379720140231713138/</a>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;sys<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;_winreg&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;tweak&nbsp;as&nbsp;necessary&nbsp;</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">version&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sys.version[:</span><span style="color: #000000">3</span><span style="color: #000000">]&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />installpath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sys.prefix&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />regpath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">SOFTWARE\\Python\\Pythoncore\\%s\\</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;(version)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />installkey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">InstallPath</span><span style="color: #800000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />pythonkey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PythonPath</span><span style="color: #800000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />pythonpath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">%s;%s\\Lib\\;%s\\DLLs\\</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;(<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />installpath,&nbsp;installpath,&nbsp;installpath<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;RegisterPy():<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">begin&nbsp;RegisterPy&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">:<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">open&nbsp;key&nbsp;:&nbsp;%s</span><span style="color: #800000">"</span><span style="color: #000000">%</span><span style="color: #000000">regpath<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OpenKey(HKEY_CURRENT_USER,&nbsp;regpath)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">except</span><span style="color: #000000">&nbsp;EnvironmentError&nbsp;as&nbsp;e:&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CreateKey(HKEY_CURRENT_USER,&nbsp;regpath)&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(reg,&nbsp;installkey,&nbsp;REG_SZ,&nbsp;installpath)&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(reg,&nbsp;pythonkey,&nbsp;REG_SZ,&nbsp;pythonpath)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseKey(reg)&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">except</span><span style="color: #000000">:&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">***&nbsp;EXCEPT:&nbsp;Unable&nbsp;to&nbsp;register!</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">---&nbsp;Python</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;version,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">is&nbsp;now&nbsp;registered!</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(QueryValue(reg,&nbsp;installkey)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;installpath&nbsp;</span><span style="color: #0000ff">and</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryValue(reg,&nbsp;pythonkey)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;pythonpath):&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseKey(reg)&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">===&nbsp;Python</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;version,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">is&nbsp;already&nbsp;registered!</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;CloseKey(reg)&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">***&nbsp;ERROR:Unable&nbsp;to&nbsp;register!</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">***&nbsp;REASON:You&nbsp;probably&nbsp;have&nbsp;another&nbsp;Python&nbsp;installation!</span><span style="color: #800000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;UnRegisterPy():<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">print&nbsp;"begin&nbsp;UnRegisterPy&nbsp;"</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">:<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">open&nbsp;HKEY_CURRENT_USER&nbsp;key=%s</span><span style="color: #800000">"</span><span style="color: #000000">%</span><span style="color: #000000">(regpath)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OpenKey(HKEY_CURRENT_USER,&nbsp;regpath)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">reg&nbsp;=&nbsp;OpenKey(HKEY_LOCAL_MACHINE,&nbsp;regpath)</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">except</span><span style="color: #000000">&nbsp;EnvironmentError:&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">***&nbsp;Python&nbsp;not&nbsp;registered?!</span><span style="color: #800000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">:<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteKey(reg,&nbsp;installkey)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteKey(reg,&nbsp;pythonkey)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteKey(HKEY_LOCAL_MACHINE,&nbsp;regpath)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">except</span><span style="color: #000000">:<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">***&nbsp;Unable&nbsp;to&nbsp;un-register!</span><span style="color: #800000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">:<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">---&nbsp;Python</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;version,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">is&nbsp;no&nbsp;longer&nbsp;registered!</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">__name__</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">__main__</span><span style="color: #800000">"</span><span style="color: #000000">:&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;RegisterPy()</span></div><br /><br />其实手动在注册表里 操作就可以了。<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/changshoumeng/aggbug/207877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2014-07-31 20:56 <a href="http://www.cppblog.com/changshoumeng/archive/2014/07/31/207877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apns丢消息问题的解决</title><link>http://www.cppblog.com/changshoumeng/archive/2014/07/10/207601.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 10 Jul 2014 02:57:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2014/07/10/207601.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/207601.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2014/07/10/207601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/207601.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/207601.html</trackback:ping><description><![CDATA[对于&#8220;<br />如果一个消息发送失败，比如因为 deviceToken 不合法，APNs 会在大约 500ms 后断掉链接，在断链前发送的消息也会发送失败；&#8221;的解决，JAVA写代码，真优雅！<br />&nbsp;<a class=" c_tx" href="https://github.com/notnoop/java-apns" target="_blank">https://github.com/notnoop/java-apns</a>&nbsp; <br /><br /><font color="#000000" face="Verdana"> 
<p><br />&nbsp;&nbsp;&nbsp; private void monitorSocket(final Socket socket) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Launching Monitoring Thread for socket {}", socket);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread t = threadFactory.newThread(new Runnable() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final static int EXPECTED_SIZE = 6;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @SuppressWarnings("InfiniteLoopStatement")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void run() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Started monitoring thread");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream in;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = socket.getInputStream();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException ioe) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] bytes = new byte[EXPECTED_SIZE];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (in != null &amp;&amp; readPacket(in, bytes)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Error-response packet {}", Utilities.encodeHex(bytes));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Quickly close socket, so we won't ever try to send push notifications<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // using the defective socket.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Utilities.close(socket);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int command = bytes[0] &amp; 0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (command != 8) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IOException("Unexpected command byte " + command);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int statusCode = bytes[1] &amp; 0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DeliveryError e = DeliveryError.ofCode(statusCode);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int id = Utilities.parseBytes(bytes[2], bytes[3], bytes[4], bytes[5]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Closed connection cause={}; id={}", e, id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delegate.connectionClosed(e, id);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Queue&lt;ApnsNotification&gt; tempCache = new LinkedList&lt;ApnsNotification&gt;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ApnsNotification notification = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean foundNotification = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (!cachedNotifications.isEmpty()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notification = cachedNotifications.poll();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Candidate for removal, message id {}", notification.getIdentifier());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (notification.getIdentifier() == id) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Bad message found {}", notification.getIdentifier());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foundNotification = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempCache.add(notification);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (foundNotification) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("delegate.messageSendFailed, message id {}", notification.getIdentifier());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delegate.messageSendFailed(notification, new ApnsDeliveryErrorException(e));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cachedNotifications.addAll(tempCache);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int resendSize = tempCache.size();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.warn("Received error for message that wasn't in the cache...");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (autoAdjustCacheLength) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cacheLength = cacheLength + (resendSize / 2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delegate.cacheLengthExceeded(cacheLength);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("delegate.messageSendFailed, unknown id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delegate.messageSendFailed(null, new ApnsDeliveryErrorException(e));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int resendSize = 0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (!cachedNotifications.isEmpty()) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resendSize++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final ApnsNotification resendNotification = cachedNotifications.poll();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Queuing for resend {}", resendNotification.getIdentifier());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notificationsBuffer.add(resendNotification);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("resending {} notifications", resendSize);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delegate.notificationsResent(resendSize);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; drainBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Monitoring input stream closed by EOF");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // An exception when reading the error code is non-critical, it will cause another retry<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // sending the message. Other than providing a more stable network connection to the APNS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // server we can't do much about it - so let's not spam the application's error log.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("Exception while waiting for error code", e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delegate.connectionClosed(DeliveryError.UNKNOWN, -1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p><br /><img src ="http://www.cppblog.com/changshoumeng/aggbug/207601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2014-07-10 10:57 <a href="http://www.cppblog.com/changshoumeng/archive/2014/07/10/207601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高性能服务端编程知识点梳理图解</title><link>http://www.cppblog.com/changshoumeng/archive/2014/05/09/206871.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 09 May 2014 02:57:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2014/05/09/206871.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/206871.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2014/05/09/206871.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/206871.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/206871.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/images/cppblog_com/changshoumeng/QQ图片20140508143623.jpg" border="0" alt="" width="795" height="1386" /><img src ="http://www.cppblog.com/changshoumeng/aggbug/206871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2014-05-09 10:57 <a href="http://www.cppblog.com/changshoumeng/archive/2014/05/09/206871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>木马基础知识梳理</title><link>http://www.cppblog.com/changshoumeng/archive/2012/11/17/195309.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 17 Nov 2012 13:02:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2012/11/17/195309.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/195309.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2012/11/17/195309.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/195309.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/195309.html</trackback:ping><description><![CDATA[<div>1.1 什么是木马程序</div><div>&nbsp; &nbsp; &#8220;木马&#8221;是一种经过伪装的欺骗性程序，它通过将自身伪装吸引用户下载执行，从而破坏或盗取使用者的重要文件和资料。</div><div>1.2 木马与病毒的区别</div><div>&nbsp; &nbsp; 广义地讲，木马是病毒的一种，因为它们都具有潜伏性和触发性；</div><div>&nbsp; &nbsp; 区别是：木马不会自我繁殖；</div><div>1.3 木马与远程控制软件的区别</div><div>&nbsp; &nbsp; 木马的远程控制是隐蔽地进行的</div><div>1.4 一个完整的木马包含哪些部分</div><div>&nbsp; &nbsp; 一个完整的木马程序包含两部分：服务器和控制器</div><div>&nbsp; &nbsp; 服务器部分：是植入受害者电脑的部分；</div><div>&nbsp; &nbsp; 控制器部分：是黑客控制使用的部分；</div><div>1.5 木马的发展</div><div>&nbsp; &nbsp; 第一代木马：伪装性病毒 （1986年出现）</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 伪装成合法程序诱骗用户上当；</div><div>&nbsp; &nbsp; 第二代木马：诱骗型木马 （1989年出现） &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 开始具备传播特性</div><div>&nbsp; &nbsp; 第三代木马：网络传播性木马</div><div>&nbsp; &nbsp; &nbsp; &nbsp; 1.添加后门功能；2.添加击键记录功能；3.变化多端的隐藏功能；4.多种技术融合</div><div>&nbsp; &nbsp; *1.写注册表的启动来启动木马</div><div>&nbsp; &nbsp; *2.加载到服务中作为合法服务启动</div><div>&nbsp; &nbsp; *3.将木马插入到合法的进程中</div><div>1.6 正向连接与反向连接</div><div>&nbsp; &nbsp; 正向连接：木马作为服务端被植入用户电脑后，启动端口监听；黑客利用控制端连接该服务端；</div><div>&nbsp; &nbsp; 反向连接：木马作为服务端被植入用户电脑后，同时控制端在黑客电脑上启动端口监听，服务端主动连接控制端；</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 可绕过防火墙；nat；典型例子:灰鸽子；</div><div>1.7 木马的进化论</div><div>&nbsp; &nbsp; 1.简单的后台运行</div><div>&nbsp; &nbsp; 2.内部间谍软件（反向连接技术）</div><div>&nbsp; &nbsp; 3.无进程木马后门；DLL木马</div><div>&nbsp; &nbsp; 4.网页木马</div><div>&nbsp; &nbsp; 5.主流技术&#8220;rootkit&#8221;&nbsp;</div><div>&nbsp;1.8 常用木马编程技术</div><div>&nbsp; &nbsp; *1.修改注册表技术；比如&#8220;超级兔子&#8221;</div><div>&nbsp; &nbsp; *2.调用win32 API编程</div><div>&nbsp; &nbsp; *3.多线程技术；&nbsp;</div><div>&nbsp; &nbsp; *4.后台监控技术；</div><div>&nbsp; &nbsp; *5.定时触发器技术；</div><div><span style="white-space:pre">	</span>&nbsp;</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/195309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2012-11-17 21:02 <a href="http://www.cppblog.com/changshoumeng/archive/2012/11/17/195309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>套接字select模型</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/17/115627.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Mon, 17 May 2010 12:16:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/17/115627.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115627.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/17/115627.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115627.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115627.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.选择模型&nbsp;Select模型原理利用select函数，判断套接字上是否存在数据，或者能否向一个套接字写入数据。目的是防止应用程序在套接字处于锁定模式时，调用recv（或send）从没有数据的套接字上接收数据，被迫进入阻塞状态。&nbsp;select参数和返回值意义如下：int select (&nbsp;IN int nfds,&nbsp;&nbsp; &...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2010/05/17/115627.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/115627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-17 20:16 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/17/115627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 一个使用CSocket类的网络通信实例</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/14/115413.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 14 May 2010 15:12:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/14/115413.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115413.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/14/115413.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115413.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115413.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 3.8 一个使用CSocket类的网络通信实例本例采用CSocket编程模型建立一个聊天程序的简单实例。建立项目时注意选上&#8220;Windows套接字&#8221;复选框。3.8.1 服务器端应用程序设计(ServerDemo)1）界面各控件属性如下                                    控件类型          ...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2010/05/14/115413.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/115413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-14 23:12 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/14/115413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于TCP，多线程的聊天框架代码</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/14/115374.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 14 May 2010 08:03:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/14/115374.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115374.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/14/115374.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115374.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115374.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: /**//****************************************************【服务端】基于TCP，多线程的聊天框架代码评注：非常完整******************************************************/#include&nbsp;"stdafx.h"#include&nbsp;&lt;stdio.h&gt;#includ...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2010/05/14/115374.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/115374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-14 16:03 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/14/115374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>服务器端登陆机制的 实现模块</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114923.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sun, 09 May 2010 07:58:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114923.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/114923.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/114923.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/114923.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"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">头文件省略</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>——核心begin<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CSocket32;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">CSocket32&nbsp;&nbsp;&amp;m_socka实现套接字的引用</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CLogin&nbsp;&nbsp;<br><img id=Codehighlighter1_87_574_Open_Image onclick="this.style.display='none'; Codehighlighter1_87_574_Open_Text.style.display='none'; Codehighlighter1_87_574_Closed_Image.style.display='inline'; Codehighlighter1_87_574_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_87_574_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_87_574_Closed_Text.style.display='none'; Codehighlighter1_87_574_Open_Image.style.display='inline'; Codehighlighter1_87_574_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_87_574_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_87_574_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CLogin(CSocket32</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;socka);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">引用必须初始化</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&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">CLogin();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_184_201_Open_Image onclick="this.style.display='none'; Codehighlighter1_184_201_Open_Text.style.display='none'; Codehighlighter1_184_201_Closed_Image.style.display='inline'; Codehighlighter1_184_201_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_184_201_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_201_Closed_Text.style.display='none'; Codehighlighter1_184_201_Open_Image.style.display='inline'; Codehighlighter1_184_201_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">GetUser()&nbsp;</span><span id=Codehighlighter1_184_201_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_184_201_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_szUser;}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取&nbsp;用户名</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_237_254_Open_Image onclick="this.style.display='none'; Codehighlighter1_237_254_Open_Text.style.display='none'; Codehighlighter1_237_254_Closed_Image.style.display='inline'; Codehighlighter1_237_254_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_237_254_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_237_254_Closed_Text.style.display='none'; Codehighlighter1_237_254_Open_Image.style.display='inline'; Codehighlighter1_237_254_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">GetPath()&nbsp;</span><span id=Codehighlighter1_237_254_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_237_254_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_szPath;}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取&nbsp;可访问目录</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_288_305_Open_Image onclick="this.style.display='none'; Codehighlighter1_288_305_Open_Text.style.display='none'; Codehighlighter1_288_305_Closed_Image.style.display='inline'; Codehighlighter1_288_305_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_288_305_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_288_305_Closed_Text.style.display='none'; Codehighlighter1_288_305_Open_Image.style.display='inline'; Codehighlighter1_288_305_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;BOOL&nbsp;IsLoged()</span><span id=Codehighlighter1_288_305_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_288_305_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_bLogin;}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取登陆状态</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;Login(LPCSTR&nbsp;sKey,</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;str);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">登陆操作</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;USER(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">str);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">核对--用户名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;PASS(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">str);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">核对--密码</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_bLogin;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">登陆状态</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;m_szUser;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用户名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;m_szPass;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">密码</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;m_szPath;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">可访问的目录</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CSocket32&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m_socka;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">套接字引用</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>——核心end</span></div>
实现部分<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"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">——核心begin<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">异常类</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CError<br><img id=Codehighlighter1_29_146_Open_Image onclick="this.style.display='none'; Codehighlighter1_29_146_Open_Text.style.display='none'; Codehighlighter1_29_146_Closed_Image.style.display='inline'; Codehighlighter1_29_146_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_29_146_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_29_146_Closed_Text.style.display='none'; Codehighlighter1_29_146_Open_Image.style.display='inline'; Codehighlighter1_29_146_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_29_146_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_29_146_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_pError;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CError(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p)<br><img id=Codehighlighter1_86_105_Open_Image onclick="this.style.display='none'; Codehighlighter1_86_105_Open_Text.style.display='none'; Codehighlighter1_86_105_Closed_Image.style.display='inline'; Codehighlighter1_86_105_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_86_105_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_105_Closed_Text.style.display='none'; Codehighlighter1_86_105_Open_Image.style.display='inline'; Codehighlighter1_86_105_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_86_105_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_86_105_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pError&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;p;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_126_143_Open_Image onclick="this.style.display='none'; Codehighlighter1_126_143_Open_Text.style.display='none'; Codehighlighter1_126_143_Closed_Image.style.display='inline'; Codehighlighter1_126_143_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_126_143_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_126_143_Closed_Text.style.display='none'; Codehighlighter1_126_143_Open_Image.style.display='inline'; Codehighlighter1_126_143_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;what()</span><span id=Codehighlighter1_126_143_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_126_143_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_pError;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">构造初始</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">CLogin::CLogin(CSocket32</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;socka):m_socka(socka),m_bLogin(FALSE)<br><img id=Codehighlighter1_220_240_Open_Image onclick="this.style.display='none'; Codehighlighter1_220_240_Open_Text.style.display='none'; Codehighlighter1_220_240_Closed_Image.style.display='inline'; Codehighlighter1_220_240_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_220_240_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_220_240_Closed_Text.style.display='none'; Codehighlighter1_220_240_Open_Image.style.display='inline'; Codehighlighter1_220_240_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_220_240_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_220_240_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">socka的初始化。*必须*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>CLogin::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CLogin()<br><img id=Codehighlighter1_261_264_Open_Image onclick="this.style.display='none'; Codehighlighter1_261_264_Open_Text.style.display='none'; Codehighlighter1_261_264_Closed_Image.style.display='inline'; Codehighlighter1_261_264_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_261_264_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_261_264_Closed_Text.style.display='none'; Codehighlighter1_261_264_Open_Image.style.display='inline'; Codehighlighter1_261_264_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_261_264_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_261_264_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_266_328_Open_Image onclick="this.style.display='none'; Codehighlighter1_266_328_Open_Text.style.display='none'; Codehighlighter1_266_328_Closed_Image.style.display='inline'; Codehighlighter1_266_328_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_266_328_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_266_328_Closed_Text.style.display='none'; Codehighlighter1_266_328_Open_Image.style.display='inline'; Codehighlighter1_266_328_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_266_328_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_266_328_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">***********************************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1.&nbsp;登陆操作</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">BOOL&nbsp;CLogin::Login(LPCSTR&nbsp;sKey,</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">str)<br><img id=Codehighlighter1_384_697_Open_Image onclick="this.style.display='none'; Codehighlighter1_384_697_Open_Text.style.display='none'; Codehighlighter1_384_697_Closed_Image.style.display='inline'; Codehighlighter1_384_697_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_384_697_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_384_697_Closed_Text.style.display='none'; Codehighlighter1_384_697_Open_Image.style.display='inline'; Codehighlighter1_384_697_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_384_697_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_384_697_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bLogin)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_418_542_Open_Image onclick="this.style.display='none'; Codehighlighter1_418_542_Open_Text.style.display='none'; Codehighlighter1_418_542_Closed_Image.style.display='inline'; Codehighlighter1_418_542_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_418_542_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_418_542_Closed_Text.style.display='none'; Codehighlighter1_418_542_Open_Image.style.display='inline'; Codehighlighter1_418_542_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_418_542_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_418_542_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">strcmp(sKey,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">USER</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用户名正确</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(USER(str))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">strcmp(sKey,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PASS</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">密码正确</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(PASS(str))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(CError&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">e)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">异常返回</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_567_680_Open_Image onclick="this.style.display='none'; Codehighlighter1_567_680_Open_Text.style.display='none'; Codehighlighter1_567_680_Closed_Image.style.display='inline'; Codehighlighter1_567_680_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_567_680_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_567_680_Closed_Text.style.display='none'; Codehighlighter1_567_680_Open_Image.style.display='inline'; Codehighlighter1_567_680_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_567_680_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_567_680_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">530&nbsp;Login&nbsp;incorrect&nbsp;for&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">(e.what())&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;CRLF;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_socka.Send(str.c_str(),str.length());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2.&nbsp;核对用户名&nbsp;key=user</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">BOOL&nbsp;CLogin::USER(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">str)<br><img id=Codehighlighter1_751_1027_Open_Image onclick="this.style.display='none'; Codehighlighter1_751_1027_Open_Text.style.display='none'; Codehighlighter1_751_1027_Closed_Image.style.display='inline'; Codehighlighter1_751_1027_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_751_1027_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_751_1027_Closed_Text.style.display='none'; Codehighlighter1_751_1027_Open_Image.style.display='inline'; Codehighlighter1_751_1027_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_751_1027_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_751_1027_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;s[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(s,str.c_str());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strupr(s);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">theApp.m_map.count(s))</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">搜索S在map的个数</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_844_879_Open_Image onclick="this.style.display='none'; Codehighlighter1_844_879_Open_Text.style.display='none'; Codehighlighter1_844_879_Closed_Image.style.display='inline'; Codehighlighter1_844_879_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_844_879_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_844_879_Closed_Text.style.display='none'; Codehighlighter1_844_879_Open_Image.style.display='inline'; Codehighlighter1_844_879_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_844_879_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_844_879_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;CError(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">username</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_szUser&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">331&nbsp;Password&nbsp;required&nbsp;for&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">str</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;CRLF;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_socka.Send(str.c_str(),str.length());</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用户名无误，返回索取密码消息</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">3.&nbsp;核对密码&nbsp;value.pass</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">BOOL&nbsp;CLogin::PASS(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">str)<br><img id=Codehighlighter1_1082_1369_Open_Image onclick="this.style.display='none'; Codehighlighter1_1082_1369_Open_Text.style.display='none'; Codehighlighter1_1082_1369_Closed_Image.style.display='inline'; Codehighlighter1_1082_1369_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1082_1369_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1082_1369_Closed_Text.style.display='none'; Codehighlighter1_1082_1369_Open_Image.style.display='inline'; Codehighlighter1_1082_1369_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1082_1369_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1082_1369_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(theApp.m_map[m_szUser].szPass&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;str)<br><img id=Codehighlighter1_1127_1158_Open_Image onclick="this.style.display='none'; Codehighlighter1_1127_1158_Open_Text.style.display='none'; Codehighlighter1_1127_1158_Closed_Image.style.display='inline'; Codehighlighter1_1127_1158_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1127_1158_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1127_1158_Closed_Text.style.display='none'; Codehighlighter1_1127_1158_Open_Image.style.display='inline'; Codehighlighter1_1127_1158_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1127_1158_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1127_1158_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;CError(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_bLogin&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_szPass&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;str;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_szPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;theApp.m_map[m_szUser].szPath;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">密码无误，获取可访目录</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">230&nbsp;User&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">m_szUser&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;logged&nbsp;in&nbsp;,&nbsp;proceed.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">CRLF;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_socka.Send(str.c_str(),str.length());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>——核心end</span></div>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/114923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-09 15:58 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/09/114923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Socket类自封装的实现</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114903.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sun, 09 May 2010 03:13:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114903.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/114903.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114903.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/114903.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/114903.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: //&nbsp;Socket32.h:&nbsp;interface&nbsp;for&nbsp;the&nbsp;CSocket32&nbsp;class.///**///////////////////////////////////////////////////////////////////////#if&nbsp;!defined(AFX_SOCKET32_H__0C5B01C7_CA...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2010/05/09/114903.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/114903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-09 11:13 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/09/114903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FTP原理介绍</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114899.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sun, 09 May 2010 00:55:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114899.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/114899.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/09/114899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/114899.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/114899.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: FTP原理介绍&nbsp;转自http://blog.sina.com.cn/s/blog_53345c320100b5g0.html&nbsp;&nbsp;( 一)、ftp的port和pasv模式的工作方式&nbsp;&nbsp;&nbsp;&nbsp; FTP使用2个TCP端口，首先是建立一个命令端口（控制端口），然后再产生一个数据端口。国内很多教科书都讲ftp使用21...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2010/05/09/114899.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/114899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-09 08:55 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/09/114899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ftp命令行基本操作</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114881.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 08 May 2010 13:52:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114881.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/114881.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/114881.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/114881.html</trackback:ping><description><![CDATA[<div align=center>
<table class=MsoNormalTable style="WIDTH: 97%; mso-cellspacing: 0cm; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 0cm 0cm 0cm" cellSpacing=0 cellPadding=0 width="97%" border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 100%; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width="100%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center><strong><span lang=EN-US style="FONT-SIZE: 14pt; FONT-FAMILY: 黑体; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">ftp</span></strong><strong><span style="FONT-SIZE: 14pt; FONT-FAMILY: 黑体; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">命令行基本操作</span></strong><span lang=EN-US style="FONT-SIZE: 14pt; FONT-FAMILY: 黑体; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p></o:p></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1">
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 100%; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width="100%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">ftp</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">命令行基本操作 <span lang=EN-US><o:p></o:p></span></span></strong></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Ftp<o:p></o:p></span></strong></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">将文件传送到正在运行<span lang=EN-US> FTP </span>服务的远程计算机或从正在运行<span lang=EN-US> FTP </span>服务的远程计算机传送文 件（有时称作<span lang=EN-US> daemon</span>）。<span lang=EN-US>Ftp </span>可以 交互使用。单击<span lang=EN-US>&#8220;</span>相关主题<span lang=EN-US>&#8221;</span>列表中的<span lang=EN-US>&#8220;ftp </span>命令<span lang=EN-US>&#8221;</span>以获得可用的<span lang=EN-US>&#8220;ftp&#8221;</span>子命令描述。该 命令只有在安装了<span lang=EN-US> TCP/IP </span>协议之后才可用。 <span lang=EN-US>Ftp </span>是一种服务，一旦启动，将创建在其中可以使用<span lang=EN-US> ftp </span>命令的子环境，通过键入<span lang=EN-US> quit </span>子命令可以从子环境返回到<span lang=EN-US>Windows 2000 </span>命令提示符。当<span lang=EN-US> ftp </span>子环境运行时，它由<span lang=EN-US> ftp </span>命令提示符代表。<span lang=EN-US> <br><strong style="mso-bidi-font-weight: normal">ftp [-v] [-n] [-i] [-d] [-g] [-s:filename] [-a] [-w:windowsize] [computer] </strong><br></span>参数 <span lang=EN-US><br><span style="COLOR: blue">-v <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span>禁止显示远程服务器响应。 <span lang=EN-US><o:p></o:p></span></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">-n <span style="mso-spacerun: yes">&nbsp;</span></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">禁止自动登录到初始连接。<span lang=EN-US> <br><br><span style="COLOR: blue">-i <span style="mso-spacerun: yes">&nbsp;</span></span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>多个文件传送时关闭交互提示。<span lang=EN-US> <br><br><span style="COLOR: blue">-d </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>启用调试、显示在客户端和服务器之间传递的所有<span lang=EN-US> ftp </span>命令。<span lang=EN-US> <br><br><span style="COLOR: blue">-g <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span></span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><o:p></o:p></span></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">禁用文件名组，它允许在本地文件和路径名中使用通配符字符（<span lang=EN-US>* </span>和<span lang=EN-US> ?</span>）。（请参阅联机 <span lang=EN-US>&#8220;</span>命令参考<span lang=EN-US>&#8221;</span>中的<span lang=EN-US> glob </span>命令。）<span lang=EN-US> <br><br><span style="COLOR: blue">-s: filename </span><o:p></o:p></span></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">指定包含<span lang=EN-US> ftp </span>命令的文本文件；当<span lang=EN-US> ftp </span>启动后，这些命令将自动运行。该参数中不允许有空格。使用该开关而不是重定向<span lang=EN-US> (&gt;)</span>。<span lang=EN-US> <br><br><span style="COLOR: blue">-a <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span>在捆绑数据连接时使用任何本地接口。<span lang=EN-US> <br><br><span style="COLOR: blue">-w:windowsize <span style="mso-spacerun: yes">&nbsp;&nbsp;</span></span></span>替代默认大小为<span lang=EN-US> 4096 </span>的传送缓冲区。<span lang=EN-US> <br><br><span style="COLOR: blue">computer </span><br><br></span>指定要连接到远程计算机的计算机名或<span lang=EN-US> IP </span>地址。如果指定，计算机必须是行的最后一个参<span lang=EN-US> <br></span>数。<span lang=EN-US> <br><br><br style="mso-special-character: line-break"><br style="mso-special-character: line-break"><o:p></o:p></span></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br><br><strong style="mso-bidi-font-weight: normal">1.FTP:get</strong> <br></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">使用当前文件转换类型将远程文件复制到本地计算机。<span lang=EN-US><br><span style="COLOR: blue">get remote-file [local-file] </span><br></span>参数 <span lang=EN-US><br><span style="COLOR: blue">remote-file </span></span>指定要复制的远程文件。<span lang=EN-US> <br>local-file </span>指定要在本地计算机上使用的名称。如果没有指定，文件将命名为<span lang=EN-US> remote-file</span>。<span lang=EN-US> <br><br><strong style="mso-bidi-font-weight: normal">2.FTP:put </strong><br></span>使用当前文件传送类型将本地文件复制到远程计算机上。<span lang=EN-US> <br><span style="COLOR: blue">put local-file [remote-file] </span><br></span>参数 <span lang=EN-US><br><span style="COLOR: blue">local-file </span></span>指定要复制的本地文件。<span lang=EN-US> <br><span style="COLOR: blue">remote-file </span><br></span>指定要在远程计算机上使用的名称。如果没有指定，文件将命名为<span lang=EN-US> local-file</span>。<span lang=EN-US> <br><br>//============================================================================== <br></span>未做实验之前<span lang=EN-US>, </span>我们已经从上面了解了什么是<span lang=EN-US>ftp</span>以及<span lang=EN-US>put</span>命令和<span lang=EN-US>get</span>命令的用法<span lang=EN-US>, </span>这里通过<span lang=EN-US> <br></span>实验了解和学习<span lang=EN-US>ftp</span>命令<span lang=EN-US>, </span>步骤如下<span lang=EN-US>: <o:p></o:p></span></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">WIN2000</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">里单击<span lang=EN-US>&#8220;</span>开始<span lang=EN-US>&#8220;</span>、<span lang=EN-US>&#8221;</span>运行<span lang=EN-US>&#8220;,</span>弹出<span lang=EN-US>&#8221;</span>运行对话框<span lang=EN-US>&#8220;,</span>输入<span lang=EN-US>CMD,</span>出现<span lang=EN-US>NT</span>的命令行模式对<span lang=EN-US> <br></span>话框<span lang=EN-US>,</span>已经知道一个网站<span lang=EN-US>ftp.mcu51.com</span>提供 <span lang=EN-US>FTP</span>服务<span lang=EN-US>, </span>公共帐号和密码都是<span lang=EN-US>daxia.com, </span>这里想通过键盘命令从服务器上获取一个文件<span lang=EN-US>, <br></span>尝试命令如下<span lang=EN-US>(&#8216;//&#8217;</span>后面是加的说明<span lang=EN-US>): <br>//============================================================================== <br><strong style="mso-bidi-font-weight: normal">C:\&gt;ftp /? </strong><br><span style="COLOR: blue">Unknown host /?. <br></span><strong style="mso-bidi-font-weight: normal"><span style="COLOR: black; mso-themecolor: text1">ftp&gt;quit </span></strong><br><br><strong style="mso-bidi-font-weight: normal">C:\&gt;ftp : ? </strong><br><span style="COLOR: blue">Transfers files to and from a computer running an FTP server service <br>(sometimes called a daemon). Ftp can be used interactively. <br><br>FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [-A] [host] <br><br>-v Suppresses display of remote server responses. <br>-n Suppresses auto-login upon initial connection. <br>-i Turns off interactive prompting during multiple file <br>transfers. <br>-d Enables debugging. <br>-g Disables filename globbing (see GLOB command). <br>-s:filename Specifies a text file containing FTP commands; the <br>commands will automatically run after FTP starts. <br>-a Use any local interface when binding data connection. <br>-A login as anonymous. <br>-w:buffersize Overrides the default transfer buffer size of 4096. <br>host Specifies the host name or IP address of the remote <br>host to connect to. <br><br>Notes: <br>- mget and mput commands take y/n/q for yes/no/quit. <br>- Use Control-C to abort commands. <br><br></span><strong style="mso-bidi-font-weight: normal">C:\&gt;ftp </strong><br>ftp&gt; <span style="COLOR: blue">// </span></span><span style="COLOR: blue">进入<span lang=EN-US>ftp</span>对话<span lang=EN-US>,Enter</span>出现下一个<span lang=EN-US>ftp&gt; <br></span></span><span lang=EN-US>ftp&gt; ? // </span>用<span lang=EN-US>'?'</span>显示命令提示<span lang=EN-US> <br>Commands may be abbreviated. Commands are: <br><br>! delete literal prompt send <br>? debug ls put status <br>append dir mdelete pwd trace <br>ascii disconnect mdir quit type <br>bell get mget quote user <br>binary glob mkdir recv verbose <br>bye hash mls remotehelp <br>cd help mput rename <br>close lcd open rmdir <br>ftp&gt; <br><strong style="mso-bidi-font-weight: normal">ftp&gt; open /</strong>/ </span>这个<span lang=EN-US>open</span>是瞎碰的<span lang=EN-US> <br><strong style="mso-bidi-font-weight: normal">To</strong> ftp.daxia.com <br>Connected to ftp.daxia.com. <br>220 Serv-U FTP Server v5.0 for WinSock ready... <br><span style="COLOR: blue">User</span> (ftp.daxia.com:(none)): daxia.com <br>331 User name okay, need password. <br><span style="COLOR: blue">Password:</span> <br>230 User logged in, proceed. <br>ftp&gt; // </span>已经进入<span lang=EN-US>, </span>输入帐号<span lang=EN-US>&#8220;daxia.com&#8221;</span>可以看见<span lang=EN-US>, </span>输入 密码<span lang=EN-US>&#8220;daxia.com&#8221;</span>时看不见<span lang=EN-US> <br><strong style="mso-bidi-font-weight: normal">ftp&gt; ls</strong> // ls</span>命令在<span lang=EN-US>linux</span>里和<span lang=EN-US>dos</span>的<span lang=EN-US>dir</span>类似<span lang=EN-US>, </span>这里用下看是干 什么<span lang=EN-US> <br>200 PORT Command successful. <br>150 Opening ASCII mode data connection for /bin/ls. <br>_</span>请先阅读<span lang=EN-US>.txt <br>_</span>双击进入虾坛<span lang=EN-US>.htm <br></span>电子工程师手册<span lang=EN-US>_</span>超星格式<span lang=EN-US>.rar <br>226-Maximum disk quota limited to 18000000 kBytes <br>Used disk quota 969432 kBytes, available 17030567 kBytes <br>226 Transfer complete. <br>ftp: 63 bytes received in 0.00Seconds 63000.00Kbytes/sec. <br>ftp&gt; // </span>只有<span lang=EN-US>3</span>个文件<span lang=EN-US>, </span>文件夹怎么没看见<span lang=EN-US>? <br><strong style="mso-bidi-font-weight: normal">ftp&gt; help ls </strong>// </span>在帮助里查看<span lang=EN-US>ls</span>是干什么的<span lang=EN-US> <br>ls List contents of remote directory <br>ftp&gt; help dir // dir</span>和<span lang=EN-US>ls</span>解说是一样的<span lang=EN-US> <br>dir List contents of remote directory <br><strong style="mso-bidi-font-weight: normal">ftp&gt; dir </strong>// </span>但是这里用<span lang=EN-US>dir</span>就看到了根目录下所有的文件和文件<span lang=EN-US> <br></span>夹<span lang=EN-US> <br>200 PORT Command successful. <br>150 Opening ASCII mode data connection for /bin/ls. <br>drw-rw-rw- 1 user group 0 Aug 16 01:58 . <br>drw-rw-rw- 1 user group 0 Aug 16 01:58 .. <br>drw-rw-rw- 1 user group 0 Jul 21 10:42 0000 </span>请下载后自己查毒，不<span lang=EN-US> <br></span>要轻易运行程序文件等。<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 14 15:45 00000000</span>上传建议把目录打<span lang=EN-US> <br></span>包后上传，方便下载。<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 29 17:04 001pic</span>相关<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 17 21:55 00</span>目录暂时这么多，如果没<span lang=EN-US> <br></span>有，请自己建立<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 31 17:46 1</span>芯片相关<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 9 10:56 2</span>字模<span lang=EN-US>&amp;</span>字模<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 9 11:03 430</span>系列单片机<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 14 20:01 51</span>系列单片机<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 27 13:06 AVR</span>单片机<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 9 10:54 CPLD&amp;FPGA <br>drw-rw-rw- 1 user group 0 Jul 29 16:31 EDA</span>软件<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 10 11:03 MatLab <br>drw-rw-rw- 1 user group 0 Aug 6 23:27 NI</span>虚拟仪器<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 17 22:11 PC</span>端驱动、界面程序开发<span lang=EN-US> <br>-rw-rw-rw- 1 user group 597 Jul 21 11:11 _</span>请先阅读<span lang=EN-US>.txt <br>-rw-rw-rw- 1 user group 81 Jul 21 11:43 _</span>双击进入虾坛<span lang=EN-US>.htm <br>drw-rw-rw- 1 user group 0 Aug 16 01:59 arm <br>drw-rw-rw- 1 user group 0 Aug 14 23:09 c</span>语言<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 18 14:26 dsp <br>drw-rw-rw- 1 user group 0 Aug 11 21:43 usb</span>相关固件，软件<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 4 21:24 </span>编译工具<span lang=EN-US>(X86) <br>drw-rw-rw- 1 user group 0 Jul 21 08:51 </span>操作系统之<span lang=EN-US>(uc)Linux <br>drw-rw-rw- 1 user group 0 Jul 19 21:52 </span>操作系统之<span lang=EN-US>uCOSii <br>drw-rw-rw- 1 user group 0 Aug 14 15:45 </span>常用工具软件（跟电子无<span lang=EN-US> <br></span>关）<span lang=EN-US> <br>-rw-rw-rw- 1 user group 7247748 Aug 11 16:49 </span>电子工程师手册<span lang=EN-US>_</span>超星格<span lang=EN-US> <br></span>式<span lang=EN-US>.rar <br>drw-rw-rw- 1 user group 0 Aug 13 10:34 </span>蓝牙资料<span lang=EN-US> <br>dr--r--r-- 1 user group 0 Jul 21 17:00 </span>虾友通过大虾论坛上传的一<span lang=EN-US> <br></span>部分，<span lang=EN-US>3579</span>个文件。（请不要往这里传文件）<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 14 20:00 </span>相关行业标准<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 15 09:27 </span>新文件夹<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 14 20:04 </span>液晶资料<span lang=EN-US> <br>226-Maximum disk quota limited to 18000000 kBytes <br>Used disk quota 969432 kBytes, available 17030567 kBytes <br>226 Transfer complete. <br>ftp: 2332 bytes received in 0.05Seconds 46.64Kbytes/sec. <br>ftp&gt; ls <br>200 PORT Command successful. <br>150 Opening ASCII mode data connection for /bin/ls. <br>_</span>请先阅读<span lang=EN-US>.txt <br>_</span>双击进入虾坛<span lang=EN-US>.htm <br></span>电子工程师手册<span lang=EN-US>_</span>超星格式<span lang=EN-US>.rar <br>226-Maximum disk quota limited to 18000000 kBytes <br>Used disk quota 969432 kBytes, available 17030567 kBytes <br>226 Transfer complete. <br>ftp: 63 bytes received in 0.00Seconds 63000.00Kbytes/sec. <br>ftp&gt; // </span>这里从服务器获取一个文本文件<span lang=EN-US> <br>ftp&gt; get _</span>请先阅读<span lang=EN-US>.txt <br>200 PORT Command successful. <br>150 Opening ASCII mode data connection for _</span>请先阅读<span lang=EN-US>.txt (597 Bytes). <br>226-Maximum disk quota limited to 18000000 kBytes <br>Used disk quota 969432 kBytes, available 17030567 kBytes <br>226 Transfer complete. <br>ftp: 597 bytes received in 0.00Seconds 597000.00Kbytes/sec. <br>ftp&gt; // </span>切换到返回到<span lang=EN-US> Windows 2000 </span>命令<span lang=EN-US>shell <br>ftp&gt; ! <br>Microsoft Windows 2000 [Version 5.00.2195] <br>(C) </span>版权所有<span lang=EN-US> 1985-2000 Microsoft Corp. <br><br>C:\&gt; // </span>查看文件内容<span lang=EN-US> <br><strong style="mso-bidi-font-weight: normal">C:\&gt;type _</strong></span><strong style="mso-bidi-font-weight: normal">请先阅读<span lang=EN-US>.txt </span></strong><span lang=EN-US><br>0</span>。下载文件之后请杀毒后再运行！本站不能保证网友上传内容都没有病毒或者木马。<span lang=EN-US> <br>1</span>。本<span lang=EN-US>ftp</span>是为方便大虾们交流技术资料而设置，请不要在此放置非技术性资料！一经发现，<span lang=EN-US> <br></span>立即删除！<span lang=EN-US> <br>2</span>。本<span lang=EN-US>ftp</span>最大空间为<span lang=EN-US>18G,</span>每个<span lang=EN-US>IP</span>限制<span lang=EN-US>2</span>个连接，每个连接限速<span lang=EN-US>20K</span>字节每秒。<span lang=EN-US> <br>3</span>。禁止上传有版权的软件或者技术资料，以免引起麻烦。 <span lang=EN-US><br>4</span>。所有资料请自建目录，并写好说明文件，目录名要能说明内容。<span lang=EN-US> <br>5</span>。对于不明内容或者加密过的资料，一律删除。<span lang=EN-US> <br>6</span>。对于几十兆以上的很大的安装等文件，看情况删除。<span lang=EN-US> <br>7</span>。对于捣乱者，一律禁止其<span lang=EN-US>IP</span>。<span lang=EN-US> <br>8</span>。本<span lang=EN-US>FTP</span>是开放性空间<span lang=EN-US>,</span>如果您发现有触犯您的利益的资料或软件，请立即通知网管删除。<span lang=EN-US> <br>webmaster@mcu51.com <br><br></span>管理员：<span lang=EN-US>lxx005 <br>C:\&gt; // </span>这是大虾们交流技术资料的服务器<span lang=EN-US>, </span>不能胡乱上传文<span lang=EN-US> <br></span>件<span lang=EN-US>, </span>所以就不做<span lang=EN-US>put</span>命令的实验了<span lang=EN-US> <br>C:\&gt;del _</span>请先阅读<span lang=EN-US>.txt <br><br>C:\&gt; <br><br>//============================================================================== <br><br></span>实际上我们可以建立一个<span lang=EN-US>ftp</span>命令文本文件<span lang=EN-US>cmd.txt,</span>内容为<span lang=EN-US> <br><br>daxia.com <br>daxia.com <br>dir <br><br></span>那么使用<span lang=EN-US>ftp -s:cmd.txt ftp.daxia.com </span>命令后则有如下结果<span lang=EN-US>: <br>//============================================================================== <br><strong style="mso-bidi-font-weight: normal">C:\&gt;ftp -s</strong>:<span style="COLOR: blue">cmd.txt</span> <em style="mso-bidi-font-style: normal"><span style="COLOR: blue">ftp.daxia.com</span></em> <br>Connected to ftp.daxia.com. <br>220 Serv-U FTP Server v5.0 for WinSock ready... <br>User (ftp.daxia.com:(none)): <br>331 User name okay, need password. <br><br>230 User logged in, proceed. <br>ftp&gt; <br>ftp&gt; dir <br>200 PORT Command successful. <br>150 Opening ASCII mode data connection for /bin/ls. <br>drw-rw-rw- 1 user group 0 Aug 16 01:58 . <br>drw-rw-rw- 1 user group 0 Aug 16 01:58 .. <br>drw-rw-rw- 1 user group 0 Jul 21 10:42 0000 </span>请下载后自己查毒，不<span lang=EN-US> <br></span>要轻易运行程序文件等。<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 14 15:45 00000000</span>上传建议把目录打<span lang=EN-US> <br></span>包后上传，方便下载。<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 29 17:04 001pic</span>相关<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 17 21:55 00</span>目录暂时这么多，如果没<span lang=EN-US> <br></span>有，请自己建立<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 31 17:46 1</span>芯片相关<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 9 10:56 2</span>字模<span lang=EN-US>&amp;</span>字模<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 9 11:03 430</span>系列单片机<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 14 20:01 51</span>系列单片机<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 27 13:06 AVR</span>单片机<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 9 10:54 CPLD&amp;FPGA <br>drw-rw-rw- 1 user group 0 Jul 29 16:31 EDA</span>软件<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 10 11:03 MatLab <br>drw-rw-rw- 1 user group 0 Aug 6 23:27 NI</span>虚拟仪器<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 17 22:11 PC</span>端驱动、界面程序开发<span lang=EN-US> <br>-rw-rw-rw- 1 user group 597 Jul 21 11:11 _</span>请先阅读<span lang=EN-US>.txt <br>-rw-rw-rw- 1 user group 81 Jul 21 11:43 _</span>双击进入虾坛<span lang=EN-US>.htm <br>drw-rw-rw- 1 user group 0 Aug 16 01:59 arm <br>drw-rw-rw- 1 user group 0 Aug 14 23:09 c</span>语言<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 18 14:26 dsp <br>drw-rw-rw- 1 user group 0 Aug 11 21:43 usb</span>相关固件，软件<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 4 21:24 </span>编译工具<span lang=EN-US>(X86) <br>drw-rw-rw- 1 user group 0 Jul 21 08:51 </span>操作系统之<span lang=EN-US>(uc)Linux <br>drw-rw-rw- 1 user group 0 Jul 19 21:52 </span>操作系统之<span lang=EN-US>uCOSii <br>drw-rw-rw- 1 user group 0 Aug 14 15:45 </span>常用工具软件（跟电子无<span lang=EN-US> <br></span>关）<span lang=EN-US> <br>-rw-rw-rw- 1 user group 7247748 Aug 11 16:49 </span>电子工程师手册<span lang=EN-US>_</span>超星格<span lang=EN-US> <br></span>式<span lang=EN-US>.rar <br>drw-rw-rw- 1 user group 0 Aug 13 10:34 </span>蓝牙资料<span lang=EN-US> <br>dr--r--r-- 1 user group 0 Jul 21 17:00 </span>虾友通过大虾论坛上传的一<span lang=EN-US> <br></span>部分，<span lang=EN-US>3579</span>个文件。（请不要往这里传文件）<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 14 20:00 </span>相关行业标准<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 15 09:27 </span>新文件夹<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 14 20:04 </span>液晶资料<span lang=EN-US> <br>226-Maximum disk quota limited to 18000000 kBytes <br>Used disk quota 969432 kBytes, available 17030567 kBytes <br>226 Transfer complete. <br>ftp: 2332 bytes received in 0.02Seconds 116.60Kbytes/sec. <br>ftp&gt; <br>ftp&gt; cd 51</span>系列单片机<span lang=EN-US> <br>250 Directory changed to /51</span>系列单片机<span lang=EN-US> <br>ftp&gt; dir <br>200 PORT Command successful. <br>150 Opening ASCII mode data connection for /bin/ls. <br>drw-rw-rw- 1 user group 0 Aug 14 20:01 . <br>drw-rw-rw- 1 user group 0 Aug 14 20:01 .. <br>drw-rw-rw- 1 user group 0 Aug 9 15:49 51hex_bin <br>drw-rw-rw- 1 user group 0 Aug 16 01:59 51</span>工具<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 4 21:09 51</span>学习<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Aug 4 21:07 51</span>源程序<span lang=EN-US> <br>-rw-rw-rw- 1 user group 81 Jul 21 11:43 _</span>双击进入虾坛<span lang=EN-US>.htm <br>226-Maximum disk quota limited to 18000000 kBytes <br>Used disk quota 969432 kBytes, available 17030567 kBytes <br>226 Transfer complete. <br>ftp: 448 bytes received in 0.02Seconds 22.40Kbytes/sec. <br>ftp&gt; cd 51</span>源程序<span lang=EN-US> <br>250 Directory changed to /51</span>系列单片机<span lang=EN-US>/51</span>源程序<span lang=EN-US> <br>ftp&gt; dir <br>200 PORT Command successful. <br>150 Opening ASCII mode data connection for /bin/ls. <br>drw-rw-rw- 1 user group 0 Aug 4 21:07 . <br>drw-rw-rw- 1 user group 0 Aug 4 21:07 .. <br>drw-rw-rw- 1 user group 0 Jul 15 21:42 C51_ASM</span>函数相互调用<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 18 00:26 Keil</span>公司提供的<span lang=EN-US>C51</span>例程<span lang=EN-US>(</span>部<span lang=EN-US> <br></span>分源码<span lang=EN-US>) <br>drw-rw-rw- 1 user group 0 Aug 5 22:55 MCS-51</span>单片机实用子程序库<span lang=EN-US> <br>(</span>汇编源码<span lang=EN-US>) <br>drw-rw-rw- 1 user group 0 Jul 26 23:35 </span>定时器中断例程<span lang=EN-US> <br>drw-rw-rw- 1 user group 0 Jul 18 23:05 </span>外部中断例程<span lang=EN-US> <br>226-Maximum disk quota limited to 18000000 kBytes <br>Used disk quota 969432 kBytes, available 17030567 kBytes <br>226 Transfer complete. <br>ftp: 512 bytes received in 0.02Seconds 25.60Kbytes/sec. <br>ftp&gt; cd </span>定时器中断例程<span lang=EN-US> <br>250 Directory changed to /51</span>系列单片机<span lang=EN-US>/51</span>源程序<span lang=EN-US>/</span>定时器中断例程<span lang=EN-US> <br>ftp&gt; ls <br>200 PORT Command successful. <br>150 Opening ASCII mode data connection for /bin/ls. <br>T0_ASM.rar <br>T0_C51.rar <br>readme.txt <br></span>定时器使用演示（新）<span lang=EN-US>.rar <br>226-Maximum disk quota limited to 18000000 kBytes <br>Used disk quota 969432 kBytes, available 17030567 kBytes <br>226 Transfer complete. <br>ftp: 62 bytes received in 0.00Seconds 62000.00Kbytes/sec. <br>ftp&gt; <br>ftp&gt; bye <br>221 Goodbye! <br><br><strong style="mso-bidi-font-weight: normal">C:\&gt;exit </strong><br><br style="mso-special-character: line-break"><br style="mso-special-character: line-break"><o:p></o:p></span></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 100%; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" width="100%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></strong></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/114881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-08 21:52 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/08/114881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>套接口属性设置和获取实例</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114830.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 08 May 2010 02:25:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114830.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/114830.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/114830.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/114830.html</trackback:ping><description><![CDATA[<img id=Codehighlighter1_0_124_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_124_Open_Text.style.display='none'; Codehighlighter1_0_124_Closed_Image.style.display='inline'; Codehighlighter1_0_124_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_124_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_124_Closed_Text.style.display='none'; Codehighlighter1_0_124_Open_Image.style.display='inline'; Codehighlighter1_0_124_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_124_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_124_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*****************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>程序名称：socketopt.cpp&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>程序功能：该程序演示了getsockopt()函数和setsockopt()函数用法<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;changshoumeng&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">winsock2.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma&nbsp;comment(lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ws2_32.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_234_2065_Open_Image onclick="this.style.display='none'; Codehighlighter1_234_2065_Open_Text.style.display='none'; Codehighlighter1_234_2065_Closed_Image.style.display='inline'; Codehighlighter1_234_2065_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_234_2065_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_234_2065_Closed_Text.style.display='none'; Codehighlighter1_234_2065_Open_Image.style.display='inline'; Codehighlighter1_234_2065_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_234_2065_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_234_2065_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WSADATA&nbsp;wsaData;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;SOCKET&nbsp;s;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;optname;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">存放选项的值</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;optlen;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">选项的长度</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(WSAStartup(MAKEWORD(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">wsaData)&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_359_415_Open_Image onclick="this.style.display='none'; Codehighlighter1_359_415_Open_Text.style.display='none'; Codehighlighter1_359_415_Closed_Image.style.display='inline'; Codehighlighter1_359_415_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_359_415_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_359_415_Closed_Text.style.display='none'; Codehighlighter1_359_415_Open_Image.style.display='inline'; Codehighlighter1_359_415_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_359_415_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_359_415_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Failed&nbsp;to&nbsp;load&nbsp;winsock.&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;socket(AF_INET,SOCK_STREAM,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建一个套接口</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;INVALID_SOCKET)<br><img id=Codehighlighter1_494_541_Open_Image onclick="this.style.display='none'; Codehighlighter1_494_541_Open_Text.style.display='none'; Codehighlighter1_494_541_Closed_Image.style.display='inline'; Codehighlighter1_494_541_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_494_541_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_494_541_Closed_Text.style.display='none'; Codehighlighter1_494_541_Open_Image.style.display='inline'; Codehighlighter1_494_541_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_494_541_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_494_541_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">socket()&nbsp;Error&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;optlen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(optname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">---------------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获得套接口类型</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockopt(s,SOL_SOCKET,SO_TYPE,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optlen)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SOCKET_ERROR)<br><img id=Codehighlighter1_709_783_Open_Image onclick="this.style.display='none'; Codehighlighter1_709_783_Open_Text.style.display='none'; Codehighlighter1_709_783_Closed_Image.style.display='inline'; Codehighlighter1_709_783_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_709_783_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_709_783_Closed_Text.style.display='none'; Codehighlighter1_709_783_Open_Image.style.display='inline'; Codehighlighter1_709_783_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_709_783_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_709_783_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">以下信息是由getsockopt()函数取得的SO_SOCKET&nbsp;级别选项实例\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(optname)<br><img id=Codehighlighter1_861_1049_Open_Image onclick="this.style.display='none'; Codehighlighter1_861_1049_Open_Text.style.display='none'; Codehighlighter1_861_1049_Closed_Image.style.display='inline'; Codehighlighter1_861_1049_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_861_1049_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_861_1049_Closed_Text.style.display='none'; Codehighlighter1_861_1049_Open_Image.style.display='inline'; Codehighlighter1_861_1049_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_861_1049_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_861_1049_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;SOCK_STREAM:&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_TYPE:SOCK_STREAM&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;SOCK_DGRAM&nbsp;:&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_TYPE:SOCK_DGRAM&nbsp;&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;SOCK_RAW&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_TYPE:SOCK_RAW&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取接收缓冲区的大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optlen)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SOCKET_ERROR)<br><img id=Codehighlighter1_1151_1226_Open_Image onclick="this.style.display='none'; Codehighlighter1_1151_1226_Open_Text.style.display='none'; Codehighlighter1_1151_1226_Closed_Image.style.display='inline'; Codehighlighter1_1151_1226_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1151_1226_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1151_1226_Closed_Text.style.display='none'; Codehighlighter1_1151_1226_Open_Image.style.display='inline'; Codehighlighter1_1151_1226_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1151_1226_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1151_1226_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_RCVBUF:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,optname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取发送缓冲区的大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockopt(s,SOL_SOCKET,SO_SNDBUF,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optlen)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SOCKET_ERROR)<br><img id=Codehighlighter1_1369_1444_Open_Image onclick="this.style.display='none'; Codehighlighter1_1369_1444_Open_Text.style.display='none'; Codehighlighter1_1369_1444_Closed_Image.style.display='inline'; Codehighlighter1_1369_1444_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1369_1444_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1369_1444_Closed_Text.style.display='none'; Codehighlighter1_1369_1444_Open_Image.style.display='inline'; Codehighlighter1_1369_1444_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1369_1444_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1369_1444_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_SNDBUF:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,optname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;optname&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重新设置缓冲区的大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(optname)&nbsp;)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;SOCKET_ERROR)<br><img id=Codehighlighter1_1620_1696_Open_Image onclick="this.style.display='none'; Codehighlighter1_1620_1696_Open_Text.style.display='none'; Codehighlighter1_1620_1696_Closed_Image.style.display='inline'; Codehighlighter1_1620_1696_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1620_1696_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1620_1696_Closed_Text.style.display='none'; Codehighlighter1_1620_1696_Open_Image.style.display='inline'; Codehighlighter1_1620_1696_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1620_1696_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1620_1696_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">setsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取重新设置的接收缓冲区的大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optlen)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;SOCKET_ERROR)<br><img id=Codehighlighter1_1804_1880_Open_Image onclick="this.style.display='none'; Codehighlighter1_1804_1880_Open_Text.style.display='none'; Codehighlighter1_1804_1880_Closed_Image.style.display='inline'; Codehighlighter1_1804_1880_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1804_1880_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1804_1880_Closed_Text.style.display='none'; Codehighlighter1_1804_1880_Open_Image.style.display='inline'; Codehighlighter1_1804_1880_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1804_1880_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1804_1880_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">---------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">使用setsockopt()函数设置后再取得的SO_RCVBUF数值\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_RCVBUF:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,optname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">---------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;WSACleanup();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/114830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-08 10:25 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/08/114830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络信息获取函数应用实例</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114829.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 08 May 2010 02:17:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114829.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/114829.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/114829.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/114829.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"><img id=Codehighlighter1_0_253_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_253_Open_Text.style.display='none'; Codehighlighter1_0_253_Closed_Image.style.display='inline'; Codehighlighter1_0_253_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_253_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_253_Closed_Text.style.display='none'; Codehighlighter1_0_253_Open_Image.style.display='inline'; Codehighlighter1_0_253_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_253_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_253_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">**************************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;调试环境：VC++6.0<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;程序名称：host.cpp<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;程序功能：该程序使用网络信息获取函数取得主机的有关信息，<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用以下三个函数：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gethostname()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gethostbyname()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getprotobyname()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;*************************************changshoumeng</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">winsock2.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma&nbsp;comment(lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ws2_32.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_363_1927_Open_Image onclick="this.style.display='none'; Codehighlighter1_363_1927_Open_Text.style.display='none'; Codehighlighter1_363_1927_Closed_Image.style.display='inline'; Codehighlighter1_363_1927_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_363_1927_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_363_1927_Closed_Text.style.display='none'; Codehighlighter1_363_1927_Open_Image.style.display='inline'; Codehighlighter1_363_1927_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_363_1927_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_363_1927_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WSADATA&nbsp;wsaData;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;hostname[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;hostent&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pHostent;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">主机信息指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;protoent&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pProtoent;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">主机协议指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;sockaddr_in&nbsp;sa;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">本机地址信息</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(WSAStartup(MAKEWORD(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">wsaData)&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_555_612_Open_Image onclick="this.style.display='none'; Codehighlighter1_555_612_Open_Text.style.display='none'; Codehighlighter1_555_612_Closed_Image.style.display='inline'; Codehighlighter1_555_612_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_555_612_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_555_612_Closed_Text.style.display='none'; Codehighlighter1_555_612_Open_Image.style.display='inline'; Codehighlighter1_555_612_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_555_612_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_555_612_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Failed&nbsp;to&nbsp;load&nbsp;Winsock.&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">--------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(gethostname(hostname,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(hostname))&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_703_776_Open_Image onclick="this.style.display='none'; Codehighlighter1_703_776_Open_Text.style.display='none'; Codehighlighter1_703_776_Closed_Image.style.display='inline'; Codehighlighter1_703_776_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_703_776_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_703_776_Closed_Text.style.display='none'; Codehighlighter1_703_776_Open_Image.style.display='inline'; Codehighlighter1_703_776_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_703_776_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_703_776_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">gethostname()&nbsp;Error:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">以下信息是由gethostname()函数取得\n&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Local&nbsp;host&nbsp;name:&nbsp;%s&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,hostname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;pHostent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gethostbyname(hostname);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回指定主机名的信息</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pHostent&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">NULL)<br><img id=Codehighlighter1_977_1053_Open_Image onclick="this.style.display='none'; Codehighlighter1_977_1053_Open_Text.style.display='none'; Codehighlighter1_977_1053_Closed_Image.style.display='inline'; Codehighlighter1_977_1053_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_977_1053_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_977_1053_Closed_Text.style.display='none'; Codehighlighter1_977_1053_Open_Image.style.display='inline'; Codehighlighter1_977_1053_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_977_1053_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_977_1053_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">gethostbyname()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">以下信息由gethostbyname()函数取得\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name:%s\n&nbsp;aliases:%d\n&nbsp;addrtype:%d\n&nbsp;length:%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_name,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">名称</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_aliases,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">别名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_addrtype,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">地址类型</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_length&nbsp;&nbsp;);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">地址长度</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_addr_list[n];n</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1323_1467_Open_Image onclick="this.style.display='none'; Codehighlighter1_1323_1467_Open_Text.style.display='none'; Codehighlighter1_1323_1467_Closed_Image.style.display='inline'; Codehighlighter1_1323_1467_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1323_1467_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1323_1467_Closed_Text.style.display='none'; Codehighlighter1_1323_1467_Open_Image.style.display='inline'; Codehighlighter1_1323_1467_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_1323_1467_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1323_1467_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;memcpy(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">sa.sin_addr.s_addr,pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_addr_list[n],&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_length);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Address:%s&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,inet_ntoa(sa.sin_addr));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">主机地址即IP地址</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;pProtoent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getprotobyname(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tcp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回指定协议的信息</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pProtoent&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br><img id=Codehighlighter1_1580_1657_Open_Image onclick="this.style.display='none'; Codehighlighter1_1580_1657_Open_Text.style.display='none'; Codehighlighter1_1580_1657_Closed_Image.style.display='inline'; Codehighlighter1_1580_1657_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1580_1657_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1580_1657_Closed_Text.style.display='none'; Codehighlighter1_1580_1657_Open_Image.style.display='inline'; Codehighlighter1_1580_1657_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_1580_1657_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1580_1657_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getprotobyname()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">以下信息由&nbsp;getprotobyname()函数取得&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name:%s&nbsp;\n&nbsp;proto:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pProtoent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">p_name,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">协议名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pProtoent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">p_proto&nbsp;);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">以主机顺序排列的协议号</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;pProtoent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">p_aliases[n];n</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1847_1908_Open_Image onclick="this.style.display='none'; Codehighlighter1_1847_1908_Open_Text.style.display='none'; Codehighlighter1_1847_1908_Closed_Image.style.display='inline'; Codehighlighter1_1847_1908_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1847_1908_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1847_1908_Closed_Text.style.display='none'; Codehighlighter1_1847_1908_Open_Image.style.display='inline'; Codehighlighter1_1847_1908_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_1847_1908_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1847_1908_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">aliases:&nbsp;%s&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,pProtoent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">p_aliases[n]);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WSACleanup();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br><img height=327 alt="" src="http://www.cppblog.com/images/cppblog_com/changshoumeng/host.jpg" width=361 border=0>&nbsp;
<img src ="http://www.cppblog.com/changshoumeng/aggbug/114829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-08 10:17 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/08/114829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于UDP的通讯程序代码</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114827.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 08 May 2010 02:12:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114827.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/114827.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/114827.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/114827.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 服务器#include&nbsp;&lt;winsock2.h&gt;#include&nbsp;&lt;stdio.h&gt;#include&nbsp;&lt;stdlib.h&gt;#pragma&nbsp;comment&nbsp;(lib,"ws2_32.lib")//服务器端口为5050#define&nbsp;DEFAULT_PORT&nbsp;5050#define&nbsp;...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2010/05/08/114827.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/114827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-08 10:12 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/08/114827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于TCP的通讯程序----基本框架</title><link>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114826.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 08 May 2010 02:10:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114826.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/114826.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2010/05/08/114826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/114826.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/114826.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 服务器端#include&lt;Winsock2.h&gt;#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#pragma&nbsp;comment&nbsp;(lib,"ws2_32.lib")//服务器使用的端口号为5050#define&nbsp;DEFAULT_PORT&nbsp;5050//数据缓冲区长度#define&nbsp;BUFF...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2010/05/08/114826.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/114826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-08 10:10 <a href="http://www.cppblog.com/changshoumeng/archive/2010/05/08/114826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>