﻿<?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/len/category/7471.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 04 Jul 2008 04:28:39 GMT</lastBuildDate><pubDate>Fri, 04 Jul 2008 04:28:39 GMT</pubDate><ttl>60</ttl><item><title>Cygwin，以及远程登陆Linux桌面</title><link>http://www.cppblog.com/len/archive/2008/07/03/55234.html</link><dc:creator>len</dc:creator><author>len</author><pubDate>Thu, 03 Jul 2008 13:55:00 GMT</pubDate><guid>http://www.cppblog.com/len/archive/2008/07/03/55234.html</guid><wfw:comment>http://www.cppblog.com/len/comments/55234.html</wfw:comment><comments>http://www.cppblog.com/len/archive/2008/07/03/55234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/len/comments/commentRss/55234.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/len/services/trackbacks/55234.html</trackback:ping><description><![CDATA[<h3>安装Cygwin</h3>  <p>在<a href="http://www.cygwin.com/">cgywin官方主页</a>下载安装文件<a href="http://www.cygwin.com/setup.exe">setup.exe</a>,这只是一个网络安装包，体积很小。cgywin包含了许多GNU下的应用程序，真正安装时会根据你选择的组件，会自动去网上下载安装的。在国内最好使用镜像服务，这样速度会提高很多，建议去<a title="http://www.cygwin.net.cn/" href="http://www.cygwin.net.cn/">http://www.cygwin.net.cn/</a>或<a title="http://www.cygwin.cn/" href="http://www.cygwin.cn/">http://www.cygwin.cn/</a>下载上述的安装包，并在安装进行到Choose A Download Site这个步骤时，选择合理的镜像。由于中国南北网速的差异，上述两个地址都尝试一下，看看哪个对你而言速度更快一些。</p>  <p>在进行到Select Packages这个步骤时，选择你需要包，建议如下：</p>  <ul>   <li>Shells -&gt; rxvt-unicode-x&#160; 强大的X终端，可用它替换windows下的cmd.exe </li>    <li>Net-&gt; openssh&#160; ssh客户端，可作putty的替换 </li>    <li>Net-&gt; inetutils&#160; 可选，包含一些基本的网络工具，如telnet，否则在cygwin下无法使用windows的telnet </li> </ul>  <p>cygwin安装时会自动进行包关联，在安装rxvt时，已自动将X server安装上了。</p>  <h3>配置调整</h3>  <p>启动cygwin,实际上是运行cgywin.bat批处理，它又调用了cmd.exe。我们将安装的rxvt作为默认终端，需要修改cygwin.bat。下面是我机子上的配置修改，请对应修改相应的路径。</p>  <pre class="code">@echo off
d:
chdir d:\Cygwin\bin
rxvt -e bash --login -i</pre>

<p>调整rxvt观感，需要修改你用户主目录下的.Xdefaults文件，此文件在你选择的安装目录下的home\usrname下，在我的机子上是<tt>D:\Cgywin\home\len。若不存在，可在此目录下新建一个，修改内容如下：</tt></p>

<pre class="code">Rxvt*background:        black
Rxvt*foreground:        #E2E6C7 
Rxvt*font:              9x16 
Rxvt*boldFont:          9x16 
Rxvt*scrollBar_right:   True
Rxvt*saveLines:         1024
Rxvt*geometry:          80x30
Rxvt*color0:            black
Rxvt*color1:            red
Rxvt*color2:            green   
Rxvt*color3:            yellow
Rxvt*color4:            blue
Rxvt*color5:            magenta
Rxvt*color6:            cyan    
Rxvt*color7:            white   
Rxvt*color8:            burlywood1
Rxvt*color9:            sienna1 
Rxvt*color10:           PaleVioletRed1  
Rxvt*color11:           LightSkyBlue    
Rxvt*color12:           white   
Rxvt*color13:           white
Rxvt*color14:           white   
Rxvt*color15:           white </pre>

<p>在cygwin下也是可以访问Windows下其他盘符的,如<tt>cd /cygdrive/c/windows</tt>，就转到了C盘windows目录下。这样对于在linux下工作的人说有点儿别扭，更希望是以<tt>cd /mnt/c/windows</tt>的mount方式来访问其他盘符。这需要修改注册表的选项，将<tt>HKLM\software\Cygnus Solutions\Cgywin\mounts v2</tt>下的子项<tt>cygdrive prefix</tt>更改为<tt>/mnt</tt>即可。</p>

<h3>远程登陆Linux桌面</h3>

<p>其实这里介绍的不仅仅适用于Linux，而是针对X Window的。X Widonw的介绍不进行赘述，但需要明确其中的服务器端和客户端的区别，在X Window的概念中服务器端是指你进行显示，输入输出的机器，也是接下来示例中的本机len-computer,IP为10.3.164.70，而客户端指的是进行远程登陆的机器auto-desktop,IP为10.3.164.74。</p>

<p>在局域网内最简单的方法是使用XDMCP连接，这时远程的机器启用xdmcp。那台机器运行着ubuntu-8.04，用gdm进行窗口管理，编辑/etc/gdm/gdm.conf-custom如下，其他版本的linux需找到对应的窗口管理的配置文件。</p>

<pre class="code">[security]
DisallowTCP=false

[xdmcp]
Enale=true</pre>

<p>修改完后，在远程机器上重启服务，<tt>$sudo /etc/init.d/gdm restart。</tt>接下来本机启动cgywin，转到X目录下，运行Xwin.exe，使用 -query指定远程的linux机器的ip即可。</p>

<pre class="console">Len@len-computer /usr/X11R6/bin
$ cd /usr/X11R6/bin

Len@len-computer /usr/X11R6/bin
$ Xwin -query 10.3.164.74</pre>

<p>这里会出现如下面图示的窗口，提示输入用户名和密码。另再附一张在登陆成功后，我在本地执行远程操作的截图。</p>

<p><a href="http://www.cppblog.com/images/cppblog_com/len/WindowsLiveWriter/CygwinLinux_127B5/login_4.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="465" alt="login" src="http://www.cppblog.com/images/cppblog_com/len/WindowsLiveWriter/CygwinLinux_127B5/login_thumb_1.png" width="644" border="0" /></a> </p>

<p><a href="http://www.cppblog.com/images/cppblog_com/len/WindowsLiveWriter/CygwinLinux_127B5/cygwinX_2.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="484" alt="cygwinX" src="http://www.cppblog.com/images/cppblog_com/len/WindowsLiveWriter/CygwinLinux_127B5/cygwinX_thumb.png" width="644" border="0" /></a> </p>

<p>如果你需要连接的远程机器比较固定，可以修改本地机器<tt>d:\cgygin\usrX11R6\bin\startxdmcp.bat</tt>中的<tt>REMOTE_HOST</tt>值为你需要连接机器的IP，这个批处理设置了一些有用的环境变量值。或许你需要创建一个桌面的快键方式，这样每次点击，就直接连接到远程机器了。</p>

<h3>不引入桌面环境</h3>

<p>可能有时候只需要将某个需要X服务的远程应用程序引入到本地桌面显示，而不需要启动像上面的GNOME或者KDE等庞大的桌面环境。这样做比较适合喜欢终端操作的人，我就常常终端敲命令，然后将gvim,openoffice这些从远程导入到本地操作。</p>

<p>找到d:\cgywin\usr\X11R6\bin\startwin.bat，将<tt>%RUN% xterm -e /usr/bin/bash -l</tt>注释掉，因为我们己经有了rxvt,不需要一个新的xterm终端了，执行该批处理文件，就会在本机运行X server。启动cgywin，用ssh登陆到远程机器上，执行如下命令，导出DISPLAY环境变量和运行你感兴趣的程序。</p>

<pre class="console">auto@Auto-desktop:~$ export DISPLAY=10.3.164.70:0.0
auto@Auto-desktop:~$ gvim&amp;
[1] 22652
auto@Auto-desktop:~$ oowriter&amp;</pre>

<p>其中环境变量DISPLAY中的:0.0部分表示X server的display和screen。display指运行着X server实例。如果使用TCP/IP连接，表示的是端口6000+display号做为连接。screen代表X server上的不同输出设备。我在例子中执行gvim和openoffice.org-writer，运行的效果可看下面的截图。在ubuntu上运行着的gvim和openoffice都在我本机10.3.164.70上显示了，并且可操作。</p>

<p><a href="http://www.cppblog.com/images/cppblog_com/len/WindowsLiveWriter/CygwinLinux_127B5/screen_2.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="484" alt="screen" src="http://www.cppblog.com/images/cppblog_com/len/WindowsLiveWriter/CygwinLinux_127B5/screen_thumb.png" width="644" border="0" /></a> </p>

<h3>有用的链接</h3>

<p><a href="http://x.cygwin.com/docs/faq/cygwin-x-faq.html">Cgywin/X FAQ</a> 在碰到一些操作问题时，不妨先看看这份FAQ</p>

<p><a href="http://blog.csdn.net/easwy/archive/2007/09/30/1807725.aspx">使用cygwin X server实现Linux远程桌面</a> easwy介绍了KDE环境下的配置，部分受此启发</p>

<p><a href="http://blog.csdn.net/easwy/archive/2007/10/05/1812242.aspx">使用rxvt做为cygwin终端</a> 碰到rxvt中文显示问题时，或许有帮助</p><img src ="http://www.cppblog.com/len/aggbug/55234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/len/" target="_blank">len</a> 2008-07-03 21:55 <a href="http://www.cppblog.com/len/archive/2008/07/03/55234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的QQ代理验证</title><link>http://www.cppblog.com/len/archive/2008/07/02/55174.html</link><dc:creator>len</dc:creator><author>len</author><pubDate>Wed, 02 Jul 2008 14:13:00 GMT</pubDate><guid>http://www.cppblog.com/len/archive/2008/07/02/55174.html</guid><wfw:comment>http://www.cppblog.com/len/comments/55174.html</wfw:comment><comments>http://www.cppblog.com/len/archive/2008/07/02/55174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/len/comments/commentRss/55174.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/len/services/trackbacks/55174.html</trackback:ping><description><![CDATA[
		<p>QQ在许多公司内部被禁止使用,为了能使用QQ,稍微懂点儿计算机的人都知道用代理。QQ提供了socket和http代理这两种功能，socket代理功能强大，但一般公司对外允许连接的端口号比较有限，难以利用。大多数公司是允许连接外部的80端口的，这样使用QQ的http代理是可行的。但是找到能用的QQ代理有点儿麻烦，因此下面的Python代码提供了自动进行QQ代理验证的功能。</p>
		<pre class="code">import urllib2
import socket
import re

f = urllib2.urlopen('http://www.proxycn.com/html_proxy/http-1.html')
content = f.read()
f.close()
ipPattern = re.compile(r'(\d+\.\d+\.\d+\.\d+):80')
ipList = ipPattern.findall(content)
print ipList
requestData = "CONNECT http.tencent.com:443 HTTP/1.1\x0d\x0a"
requestData += "Accept: */*\x0d\x0aContent-Type: text/html\x0d\x0a"
requestData += "Proxy-Connection: Keep-Alive\x0d\x0a"
requestData += "Content-length: 0\x0d\x0a\x0d\x0a"
for ip in ipList:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((ip,80))
        s.send(requestData)
        data = s.recv(64)
        if data.find("200 Connection established")!= -1:
            print ip, 'good'
            # A vailable proxy is found once, then exit the program
            s.close
            exit(0)
        else:
            print ip, 'bad'
    except socket.error:
        print ip, 'dead'
    finally:
        s.close</pre>
		<p>程序在找到一个可用的QQ代理后退出，用good标识。另两种代理服务器的状态是dead,说明本地无法连接到代理服务器，或是bad，能与代理服务器建立连接，但是代理不能与QQ服务器通讯。</p>
		<h3>代码思路</h3>
		<p>通过<a href="http://www.proxycn.com/index.php">代理中国</a>获取到80端口的代理服务器列表，使用了urllib2模块获取页面数据，然后正则表达式解析出80端口的IP地址存入list中。接下来的几行代码简单，但是很重要，使用较为底层的socket对象，构造合适的数据包通过代理，请求与QQ服务器连接，通过读取的返回数据包来验证连接是否能建立。</p>
		<p>这里主要涉及到了HTTP协议的CONNECT的概念，很多人可能认为http代理只是为web浏览提供服务，其实CONNECT方法允许允许用户建立TCP连接到任何端口，这意味着代理不仅可用于HTTP，还可用于FTP，QQ等其他协议。只是网上提供CONNECT方法的代理服务器比较少，我有时候扫了一大堆，也没有找到一个可用的代理。反过来说，有时候你找到的能浏览网页的http服务器，未必能用在QQ上，QQ需要的是能CONNECT的代理。网页浏览一般只使用HTTP协议的GET或POST方法，提供这两种方法的服务器就多了。</p>
		<p>了解了代码的原理，稍做改动，就可以用于其他类型的代理的验证了，需要的是一些基本网络知识和数据报的发送和接收。</p>
<img src ="http://www.cppblog.com/len/aggbug/55174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/len/" target="_blank">len</a> 2008-07-02 22:13 <a href="http://www.cppblog.com/len/archive/2008/07/02/55174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>强大的网络传输工具cURL和libcurl</title><link>http://www.cppblog.com/len/archive/2008/06/21/54229.html</link><dc:creator>len</dc:creator><author>len</author><pubDate>Sat, 21 Jun 2008 08:33:00 GMT</pubDate><guid>http://www.cppblog.com/len/archive/2008/06/21/54229.html</guid><wfw:comment>http://www.cppblog.com/len/comments/54229.html</wfw:comment><comments>http://www.cppblog.com/len/archive/2008/06/21/54229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/len/comments/commentRss/54229.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/len/services/trackbacks/54229.html</trackback:ping><description><![CDATA[
		<h3>介绍</h3>
		<p>cURL是一个利用URL语法的文件传输工具,是基于libcurl的前端命令行工具。它支持很多协议：FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 它同样支持HTTPS认证，HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传, 上载文件断点续传, http代理服务器管道（ proxy tunneling）, 甚至它还支持IPv6, socks5代理服务器,通过http代理服务器上传文件到FTP服务器等等，功能十分强大。</p>
		<p>除了使用curl命令行直接进行相关的网络操作，你也可以自由地使用libcurl,它是用C语言编写的，可以绑定到众多的编程语言中，如C,C++,PHP,Python,Perl,Java等等。你可以很方便地利用libcurl，在程序中进行一些网络传输工作，来代替一些语言的内置，使你的知识可重用。在Unix工作环境下，你可以用curl代替wget和ftp等工具，并能将这种学习经验迁移到将来使用libcurl来完成一些自动化任务。</p>
		<p>curl是瑞典curl组织开发的，可以通过<a href="http://curl.haxx.se/">http://curl.haxx.se/</a>来获取更详细的信息和下载文件。</p>
		<h3>curl命令行工具使用</h3>
		<p>curl太强大了，只能对其HTTP的部分作一简单的介绍，其他选项可以参见其附带的手册。它的后端库的使用也非常方便，主要也是在选项设置上，跟命令行基本无异。</p>
		<h4>用法</h4>
		<p>
				<strong>curl [选项]</strong> [URL...]</p>
		<h4>URL 语法</h4>
		<p>URL语法是跟协议相关的，具体细节可参见RFC 3986 <br />可以指定多个URLs或者部分URL地址，通过花括号{}进行分割： <br />http://site.{one,two,three}.com <br />或者用[]使用字母序： <br />ftp://ftp.numericals.com/file[1-100].txt <br />ftp://ftp.numericals.com/file[001-100].txt (有前导零) <br />ftp://ftp.letters.com/file[a-z]].txt</p>
		<p>当前序列嵌套不被支持，但是还是可以使用下列的样式： <br />http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html <br />可以在命令行指定任意数量的URLs,它们将以指定的顺序被取回。 </p>
		<p>从curl7.15.1开始指定可以范围步长，所以可以得到第n个数或字母： <br />http://www.numericals.com/file[1-100:10].txt <br />http://www.letters.com/file[a-z:2].txt</p>
		<p>如果使用了protocal://前缀，curl会将尝试你想使用的协议。它默认使用HTTP，但是其他一些协议也常被用作主机名。比如说，以"ftp"打头的主机名，curl会假定你想使用ftp协议。 </p>
		<p>Curl会尝试对多文件传输使用重连接，可以使从同一服务器获取很多文件时，不会进行多次的连接。这种做法改进了速度，当然这只会在同一命令行中指定的文件启用，而不会在独立的Curl调用时使用。 </p>
		<h4>进度指示器</h4>
		<p>curl通常在操作时会显示一个进度指示器，来指明当前的传输量，传输速度和预计的剩余时间等等。 </p>
		<p>但是，即然curl默认将数据显示在终端，如果你调用curl进行操作，它会将数据打印到终端上，这时它会禁用掉进度指示器，否则这些会将输出信息搞乱掉。 </p>
		<p>如果在进行HTTP的POST或PUT请求时，你想将输出重定向到文件中，可以使用shell的重定向符(&gt;)，或者类似的-o[file]选项。 </p>
		<p>但是在FTP上传并不会这样，这些操作不会将数据插入到终端中。 </p>
		<p>如果想使用进度栏，而不是常规的指示器，那么-#会非常有帮助。 </p>
		<h4>常用的HTTP选项 </h4>
		<p>
				<strong>-A/--user-agent&lt;agent string&gt;</strong>
				<br />(HTTP)指定用户代理字符串发送给HTTP服务器。如果这个字段没有被设为"Mozilla/4.0"，某些CGIs将不会正常工作。如果在字符串中存在空白字符，需要用单引号标识。这个字段值也可用-H/--header选项进行设置。 <br />如果这选项被多次设置，最后的设置将起作用。 </p>
		<p>
				<strong>-b/--cookie&lt;name=data&gt;</strong>
				<br />(HTTP)将data作为cookie传给HTTP服务器，这数据当然是在使用了"Set-Cookie:"后，先前从服务端接收到的。这数据应是"NAME1=VALUE1;NAME2=VALUE2"的格式。 <br />如果没有"="字符，它将会当作先前存储cookie行的文件名，如果它能被匹配的话。使用这选项，也能激活"cookie parser"，它使curl记录传入的cookies数据。将它与-L/--locaion选项组合将会更加便利。被读取cookie的文件格式应当是文本HTTP头或者Netscape/Mozilla cookie文件格式。 <br />注意：被-b/--cookie指定的文件只能作为输入使用。没有cookie会存储在这文件中。为了存储cookie，应使用-c/--cookie-jar选项或者直接将HTTP头输出到文件中，用-D/--dump-header选项。这选项可以设置多次，但是只有最后一个起作用。 </p>
		<p>
				<strong>-connect-timeout&lt;seconds&gt;</strong>
				<br />以秒计的最大超时，用于进行服务器连接时。这只在连接阶段起作用，一旦curl连接建立，这选项将不再起作用。 </p>
		<p>
				<strong>-c/--cookie-jar&lt;file name&gt;</strong>
				<br />指定在完成一系列操作后，需要将全部的cookie信息保存到哪个文件中。Curl会将先前读取的cookie的信息和从服务器返回的信息一起保存。如果没有cookie信息，则不会进行写文件。cookie信息的文件将与Netscape cookie文件格式保存。如果文件名被设置为'-'，则将cookie打印至终端。 <br /><strong>注意：</strong>如果cookie-jar不能被创建写入，整个curl操作也不会失改，甚至不会向你报告错误.使用-v将会得到警告显示，但也只能在可能导致发生致命错误的情况才会显示。 </p>
		<p>
				<strong>--create-dirs</strong>
				<br />这与-o选项配合使用，curl会在需要时建立本地文件夹结构。这选项会创建在-o选项中涉及到的文件夹。如果-o选项中的文件名没有使用到文件夹，或者所需的文件夹已经存在，则不会有文件夹创建。 </p>
		<p>
				<strong>-D/--dump-header&lt;file&gt;</strong>
				<br />将协议头写到指定的文件中。当你想存储HTTP站点发给你的数据时，这选项非常有用。在协议头中的cookie将来可以用curl的另外调用来进行读取，那就是-b/--cookie选项。但是-c/--cookie-jar选项将会是更好的存储cookie信息的方法。 <br />当使用FTP协议时，ftp服务器的应答信息将相应地当作成协议头，然后被存储。 </p>
		<p>
				<strong>-p/-proxytunnel</strong>
				<br />当HTTP代理被设置后(-x/--proxy)，选项会使不是HTTP协议的传输试图通过代理隧道，而不是表现得HTTP类似的操作形为。代理隧道的方法是通过HTTP服务器直接使用CONNECT请求，让代理直接连接到curl隧道所请求的远程端口号的方式来实现的。</p>
		<p>
				<strong>-o/--output&lt;file&gt;</strong>
				<br />将输出信息打印到文件中，而不是终端。可使用{}或者[]取回多个文档，可在file指定格式中的'#'跟一数字，这样这变量将会由取回的URL字符串所取代。如下： <br />curl http://{one,two}.site.com -o "file_#1.txt" <br />如果有多个变量，可以写成下面的样子： <br />curl http://{site.host}.host[1-5].com -o "#1_#2" <br />你可对任意数量的URL使用同样多的这个选项 </p>
		<p>
				<strong>-x/--proxy&lt;proxyhost[:port]&gt;</strong>
				<br />使用指定的HTTP代理，如果端口号没有被指定，默认为1080. <br />这选项会覆盖环境变量中代理服务器的设置。如果环境变量中设置了代理，可将proxy设置为空字符串，来覆盖环境变量中的设置。 <br /><strong>注意：</strong>所有通过HTTP代理的操作都会自动转化为HTTP协议。这意味着一些特定协议的操作将会变得无效。这不会有问题，如果在设置了<em>-p/--proxytunnel</em>选项来通过代理隧道进行操作。 </p>
		<h4>简单示例 </h4>
		<p>获取cppblog首页，打印至终端 </p>
		<pre class="console">&gt;curl http://www.cppblog.com</pre>重定向，保存到文件cppblog.html <pre class="console">&gt;curl http://www.cppblog.com</pre>作用同上，使用选项 <pre class="console">&gt;curl -o baidu.html http://www.baidu.com</pre>使用http代理，可指定IP和端口 <pre class="console">&gt;curl -x 202.127.98.43:80 -o baidu.html http:www.baidu.com</pre>在访问一些论坛时，常常要求启用cookie，因为这些网站需要启用cookie来记录sessioin信息,这时需要选项-D，将cookie信息保存起来 <pre class="console">&gt;curl -o cpp.html -c len@cppblog.com[1].txt http://www.cppblog.com</pre><br />先前保存的cookie信息返回给网站,这通常会传回你的一些用户信息。 <pre class="console">&gt;curl -o cpp.html -c len@cppblog.com[2].txt -b len@cppblog.com[1].txt http://www.cppblog.com</pre><img src ="http://www.cppblog.com/len/aggbug/54229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/len/" target="_blank">len</a> 2008-06-21 16:33 <a href="http://www.cppblog.com/len/archive/2008/06/21/54229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>