﻿<?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++博客-Blog @ Blog</title><link>http://www.cppblog.com/Lee7/</link><description>  当华美的叶片落尽，生命的脉络才历历可见。 －－ 聂鲁达    
</description><language>zh-cn</language><lastBuildDate>Sun, 05 Apr 2026 11:54:36 GMT</lastBuildDate><pubDate>Sun, 05 Apr 2026 11:54:36 GMT</pubDate><ttl>60</ttl><item><title>基于C#的Socket开发快速入门</title><link>http://www.cppblog.com/Lee7/archive/2009/11/30/102299.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Mon, 30 Nov 2009 11:17:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/11/30/102299.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/102299.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/11/30/102299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/102299.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/102299.html</trackback:ping><description><![CDATA[<p>首先从原理上解释一下采用Socket接口的网络通讯，这里以最常用的C/S模式作为范例，首先，服务端有一个进程（或多个进程）在指定的端口等待客户来 连接，服务程序等待客户的连接信息，一旦连接上之后，就可以按设计的数据交换方法和格式进行数据传输。客户端在需要的时刻发出向服务端的连接请求。这里为 了便于理解，提到了一些调用及其大致的功能。使用socket调用后，仅产生了一个可以使用的socket描述符，这时还不能进行通信，还要使用其他的调 用，以使得socket所指的结构中使用的信息被填写完。</p>
<p>　　在使用TCP协议时，一般服务端进程先使用socket调用得到一个描述 符，然后使用bind调用将一个名字与socket描述符连接起来，对于Internet域就是将Internet地址联编到socket。之后，服务端 使用listen调用指出等待服务请求队列的长度。然后就可以使用accept调用等待客户端发起连接，一般是阻塞等待连接，一旦有客户端发出连接， accept返回客户的地址信息，并返回一个新的socket描述符，该描述符与原先的socket有相同的特性，这时服务端就可以使用这个新的 socket进行读写操作了。一般服务端可能在accept返回后创建一个新的进程进行与客户的通信，父进程则再到accept调用处等待另一个连接。客 户端进程一般先使用socket调用得到一个socket描述符，然后使用connect向指定的服务器上的指定端口发起连接，一旦连接成功返回，就说明 已经建立了与服务器的连接，这时就可以通过socket描述符进行读写操作了。</p>
<p>　　.NetFrameWork为Socket通讯提供了System.Net.Socket命名空间，在这个命名空间里面有以下几个常用的重要类分别是:</p>
<p>　　&#183;Socket类 这个低层的类用于管理连接，WebRequest，TcpClient和UdpClient在内部使用这个类。</p>
<p>　　&#183;NetworkStream类 这个类是从Stream派生出来的，它表示来自网络的数据流</p>
<p>　　&#183;TcpClient类 允许创建和使用TCP连接</p>
<p>　　&#183;TcpListener类 允许监听传入的TCP连接请求</p>
<p>　　&#183;UdpClient类 用于UDP客户创建连接(UDP是另外一种TCP协议，但没有得到广泛的使用，主要用于本地网络)</p>
<p>　　下面我们来看一个基于Socket的双机通信代码的C#版本</p>
<p>　　首先创建Socket对象的实例，这可以通过Socket类的构造方法来实现：</p>
<p>public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);&nbsp; </p>
<p>　　其中，addressFamily 参数指定 Socket 使用的寻址方案，socketType 参数指定 Socket 的类型，protocolType 参数指定 Socket 使用的协议。 </p>
<p>　　下面的示例语句创建一个 Socket，它可用于在基于 TCP/IP 的网络（如 Internet）上通讯。</p>
<p>Socket temp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);&nbsp; </p>
<p>　　若要使用 UDP 而不是 TCP，需要更改协议类型，如下面的示例所示： </p>
<p>Socket temp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);&nbsp; </p>
<p>　 　一旦创建 Socket，在客户端，你将可以通过Connect方法连接到指定的服务器（你可以在Connect方法前Bind端口，就是以指定的端口 发起连接，如果不事先Bind端口号的话，系统会默认在1024到5000随机绑定一个端口号），并通过Send方法向远程服务器发送数据，而后可以通过 Receive从服务端接收数据；而在服务器端，你需要使用Bind方法绑定所指定的接口使Socket与一个本地终结点相联，并通过Listen方法侦 听该接口上的请求，当侦听到用户端的连接时，调用Accept完成连接的操作，创建新的Socket以处理传入的连接请求。使用完 Socket 后，使 用 Close 方法关闭 Socket。 </p>
<p>　　可以看出，以上许多方法包含EndPoint类型的参数，在Internet中， TCP/IP 使用一个网络地址和一个服务端口号来唯一标识设备。网络地址标识网络上的特定设备；端口号标识要连接到的该设备上的特定服务。网络地址和服 务端口的组合称为终结点，在 .NET 框架中正是由 EndPoint 类表示这个终结点，它提供表示网络资源或服务的抽象，用以标志网络地址等信 息。.Net同时也为每个受支持的地址族定义了 EndPoint 的子代；对于 IP 地址族，该类为 IPEndPoint。IPEndPoint&nbsp; 类包含应用程序连接到主机上的服务所需的主机和端口信息，通过组合服务的主机IP地址和端口号，IPEndPoint 类形成到服务的连接点。</p>
<p>　　用到IPEndPoint类的时候就不可避免地涉及到计算机IP地址，System.Net命名空间中有两种类可以得到IP地址实例： </p>
<p>　　&#183;IPAddress类：IPAddress 类包含计算机在 IP 网络上的地址。其Parse方法可将 IP 地址字符串转换为 IPAddress 实例。下面的语句创建一个 IPAddress 实例： </p>
<p>IPAddress myIP = IPAddress.Parse("192.168.0.1");&nbsp; </p>
<p>　 　需要知道的是：Socket 类支持两种基本模式：同步和异步。其区别在于：在同步模式中，按块传输，对执行网络操作的函数（如 Send 和&nbsp; Receive）的调用一直等到所有内容传送操作完成后才将控制返回给调用程序。在异步模式中，是按位传输，需要指定发送的开始和结束。同步模式是最常 用的模式，我们这里的例子也是使用同步模式。</p>
<p>// 客户端</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections.Generic;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Text;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.IO;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Net;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Net.Sockets;<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">namespace</span><span style="COLOR: #000000">&nbsp;ClientDemo<br><img id=Codehighlighter1_150_1551_Open_Image onclick="this.style.display='none'; Codehighlighter1_150_1551_Open_Text.style.display='none'; Codehighlighter1_150_1551_Closed_Image.style.display='inline'; Codehighlighter1_150_1551_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_150_1551_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_150_1551_Closed_Text.style.display='none'; Codehighlighter1_150_1551_Open_Image.style.display='inline'; Codehighlighter1_150_1551_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_150_1551_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_150_1551_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">class</span><span style="COLOR: #000000">&nbsp;Program<br><img id=Codehighlighter1_174_1549_Open_Image onclick="this.style.display='none'; Codehighlighter1_174_1549_Open_Text.style.display='none'; Codehighlighter1_174_1549_Closed_Image.style.display='inline'; Codehighlighter1_174_1549_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_174_1549_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_174_1549_Closed_Text.style.display='none'; Codehighlighter1_174_1549_Open_Image.style.display='inline'; Codehighlighter1_174_1549_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_174_1549_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_174_1549_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">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Main(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[]&nbsp;args)<br><img id=Codehighlighter1_224_1543_Open_Image onclick="this.style.display='none'; Codehighlighter1_224_1543_Open_Text.style.display='none'; Codehighlighter1_224_1543_Closed_Image.style.display='inline'; Codehighlighter1_224_1543_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_224_1543_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_224_1543_Closed_Text.style.display='none'; Codehighlighter1_224_1543_Open_Image.style.display='inline'; Codehighlighter1_224_1543_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_224_1543_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_224_1543_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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_251_1217_Open_Image onclick="this.style.display='none'; Codehighlighter1_251_1217_Open_Text.style.display='none'; Codehighlighter1_251_1217_Closed_Image.style.display='inline'; Codehighlighter1_251_1217_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_251_1217_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_251_1217_Closed_Text.style.display='none'; Codehighlighter1_251_1217_Open_Image.style.display='inline'; Codehighlighter1_251_1217_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_251_1217_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_251_1217_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">int</span><span style="COLOR: #000000">&nbsp;port&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2010</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;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;host&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">127.0.0.1</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;IPAddress&nbsp;ip&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;IPAddress.Parse(host);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPEndPoint&nbsp;ipe&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;IPEndPoint(ip,&nbsp;port);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把ip和端口转化为IPEndPoint实例</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;Socket&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Socket(AddressFamily.InterNetwork,&nbsp;SocketType.Stream,&nbsp;ProtocolType.Tcp);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建一个Socket</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;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Conneting<img src="http://www.cppblog.com/Images/dot.gif"></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;c.Connect(ipe);</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">string</span><span style="COLOR: #000000">&nbsp;sendStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello!This&nbsp;is&nbsp;a&nbsp;socket&nbsp;test</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;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[]&nbsp;bs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Encoding.ASCII.GetBytes(sendStr);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　　　&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Send&nbsp;Message</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;c.Send(bs,&nbsp;bs.Length,&nbsp;</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;recvStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[]&nbsp;recvBytes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">byte</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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;bytes;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;c.Receive(recvBytes,&nbsp;recvBytes.Length,&nbsp;</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recvStr&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;Encoding.ASCII.GetString(recvBytes,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;bytes);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Client&nbsp;Get&nbsp;Message:{0}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;recvStr);</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.Close();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　　&nbsp;&nbsp;&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;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(ArgumentNullException&nbsp;e)<br><img id=Codehighlighter1_1269_1344_Open_Image onclick="this.style.display='none'; Codehighlighter1_1269_1344_Open_Text.style.display='none'; Codehighlighter1_1269_1344_Closed_Image.style.display='inline'; Codehighlighter1_1269_1344_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1269_1344_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1269_1344_Closed_Text.style.display='none'; Codehighlighter1_1269_1344_Open_Image.style.display='inline'; Codehighlighter1_1269_1344_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1269_1344_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_1269_1344_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;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ArgumentNullException:&nbsp;{0}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;e);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　　&nbsp;&nbsp;&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;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(SocketException&nbsp;e)<br><img id=Codehighlighter1_1390_1459_Open_Image onclick="this.style.display='none'; Codehighlighter1_1390_1459_Open_Text.style.display='none'; Codehighlighter1_1390_1459_Closed_Image.style.display='inline'; Codehighlighter1_1390_1459_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1390_1459_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1390_1459_Closed_Text.style.display='none'; Codehighlighter1_1390_1459_Open_Image.style.display='inline'; Codehighlighter1_1390_1459_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1390_1459_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_1390_1459_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;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SocketException:&nbsp;{0}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;e);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　　&nbsp;&nbsp;&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;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Press&nbsp;Enter&nbsp;to&nbsp;Exit</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;Console.ReadLine();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></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/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>服务端：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections.Generic;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Text;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.IO;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Net;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Net.Sockets;<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">namespace</span><span style="COLOR: #000000">&nbsp;ServerDemo<br><img id=Codehighlighter1_150_1751_Open_Image onclick="this.style.display='none'; Codehighlighter1_150_1751_Open_Text.style.display='none'; Codehighlighter1_150_1751_Closed_Image.style.display='inline'; Codehighlighter1_150_1751_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_150_1751_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_150_1751_Closed_Text.style.display='none'; Codehighlighter1_150_1751_Open_Image.style.display='inline'; Codehighlighter1_150_1751_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_150_1751_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_150_1751_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">class</span><span style="COLOR: #000000">&nbsp;Program<br><img id=Codehighlighter1_174_1749_Open_Image onclick="this.style.display='none'; Codehighlighter1_174_1749_Open_Text.style.display='none'; Codehighlighter1_174_1749_Closed_Image.style.display='inline'; Codehighlighter1_174_1749_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_174_1749_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_174_1749_Closed_Text.style.display='none'; Codehighlighter1_174_1749_Open_Image.style.display='inline'; Codehighlighter1_174_1749_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_174_1749_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_174_1749_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">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Main(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[]&nbsp;args)<br><img id=Codehighlighter1_224_1743_Open_Image onclick="this.style.display='none'; Codehighlighter1_224_1743_Open_Text.style.display='none'; Codehighlighter1_224_1743_Closed_Image.style.display='inline'; Codehighlighter1_224_1743_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_224_1743_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_224_1743_Closed_Text.style.display='none'; Codehighlighter1_224_1743_Open_Image.style.display='inline'; Codehighlighter1_224_1743_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_224_1743_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_224_1743_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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;<br><img id=Codehighlighter1_255_1408_Open_Image onclick="this.style.display='none'; Codehighlighter1_255_1408_Open_Text.style.display='none'; Codehighlighter1_255_1408_Closed_Image.style.display='inline'; Codehighlighter1_255_1408_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_255_1408_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_255_1408_Closed_Text.style.display='none'; Codehighlighter1_255_1408_Open_Image.style.display='inline'; Codehighlighter1_255_1408_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_255_1408_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_255_1408_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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;port&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2010</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;host&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">127.0.0.1</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPAddress&nbsp;ip&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;IPAddress.Parse(host);<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;&nbsp;&nbsp;&nbsp;IPEndPoint&nbsp;ipe&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;IPEndPoint(ip,&nbsp;port);<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;&nbsp;&nbsp;&nbsp;Socket&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Socket(AddressFamily.InterNetwork,&nbsp;SocketType.Stream,&nbsp;ProtocolType.Tcp);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;创建一个SOKCET类的实例</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.Bind(ipe);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;绑定端口</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.Listen(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;开始监听</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Wait&nbsp;for&nbsp;connect</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Socket&nbsp;temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s.Accept();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;为新建连接创建新的Socket</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Get&nbsp;a&nbsp;Connect</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;recvStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[]&nbsp;recvBytes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">byte</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;bytes;<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;&nbsp;&nbsp;&nbsp;bytes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;temp.Receive(recvBytes,&nbsp;recvBytes.Length,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;接收客户端的信息</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recvStr&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;Encoding.ASCII.GetString(recvBytes,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;bytes);<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;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Server&nbsp;Get&nbsp;Message:{0}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;recvStr);<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;sendStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">OK!&nbsp;Client&nbsp;Send&nbsp;Message&nbsp;Successful!</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[]&nbsp;bs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Encoding.ASCII.GetBytes(sendStr);<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;&nbsp;&nbsp;&nbsp;temp.Send(bs,&nbsp;bs.Length,&nbsp;</span><span style="COLOR: #000000">0</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.Close();<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;&nbsp;&nbsp;&nbsp;s.Close();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(ArgumentNullException&nbsp;e)<br><img id=Codehighlighter1_1463_1538_Open_Image onclick="this.style.display='none'; Codehighlighter1_1463_1538_Open_Text.style.display='none'; Codehighlighter1_1463_1538_Closed_Image.style.display='inline'; Codehighlighter1_1463_1538_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1463_1538_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1463_1538_Closed_Text.style.display='none'; Codehighlighter1_1463_1538_Open_Image.style.display='inline'; Codehighlighter1_1463_1538_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1463_1538_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_1463_1538_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;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ArgumentNullException:&nbsp;{0}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;e);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　　&nbsp;&nbsp;&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;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(SocketException&nbsp;e)<br><img id=Codehighlighter1_1584_1653_Open_Image onclick="this.style.display='none'; Codehighlighter1_1584_1653_Open_Text.style.display='none'; Codehighlighter1_1584_1653_Closed_Image.style.display='inline'; Codehighlighter1_1584_1653_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1584_1653_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1584_1653_Closed_Text.style.display='none'; Codehighlighter1_1584_1653_Open_Image.style.display='inline'; Codehighlighter1_1584_1653_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1584_1653_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_1584_1653_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;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SocketException:&nbsp;{0}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;e);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　　&nbsp;&nbsp;&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;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Press&nbsp;Enter&nbsp;to&nbsp;Exit</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;Console.ReadLine();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></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/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>面的例子是用的Socket类，System.Net.Socket命名空间还提供了两个抽象高级类TCPClient和UDPClient和用于通讯流处理的NetWorkStream,让我们看下例子</p>
<p>　　客户端</p>
<p>TcpClient tcpClient=new TcpCLient(主机IP,端口号);<br>NetworkStream ns=tcp.Client.GetStream(); </p>
<p>　　服务端</p>
<p>TcpListener tcpListener=new TcpListener(监听端口);<br>tcpListener.Start();<br>TcpClient tcpClient=tcpListener.AcceptTcpClient();<br>NetworkStream ns=tcpClient.GetStream(); </p>
<p>　　服务端用TcpListener监听,然后把连接的对象实例化为一个TcpClient,调用TcpClient.GetStream()方法,返回网络流实例化为一个NetworlStream流,下面就是用流的方法进行Send,Receive</p>
<p>　 　如果是UdpClient的话,就直接UdpClient实例化,然后调用UdpClient的Send和Receive方法,需要注意的事, UdpClient没有返回网络流的方法,就是说没有GetStream方法,所以无法流化,而且使用Udp通信的时候,不要服务器监听。</p>
<p>　　现在我们大致了解了.Net Socket通信的流程，下面我们来作一个稍微复杂点的程序，一个广播式的C/S聊天程序。</p>
<p>　　客户端设计需要一个1个ListBox，用于显示聊天内容，一个TextBox输入你要说的话，一个Button发送留言，一个Button建立连接。</p>
<p>　　点击建立连接的Button后出来一个对话框，提示输入连接服务器的IP，端口，和你的昵称，启动一个接受线程，负责接受从服务器传来的信息并显示在ListBox上面。</p>
<p>　　服务器端2个Button，一个启动服务，一个T掉已建立连接的客户端，一个ListBox显示连接上的客户端的Ip和端口。</p>
<p>　　比较重要的地方是字符串编码的问题，需要先把需要传送的字符串按照UTF8编码，然后接受的时候再还原成为GB2312，不然中文显示会是乱码。</p>
<p>　　还有一个就是接收线程，我这里简单写成一个While(ture)循环，不断判断是否有信息流入，有就接收，并显示在ListBox上，这里有问题，在.Net2.0里面，交错线程修改窗体空间属性的时候会引发一个异常，不可以直接修改，需要定义一个委托来修改。 </p>
<p>　 　当客户端需要断开连接的时候，比如点击窗体右上角的XX，就需要定义一个this.FormClosing +=&nbsp; new System.Windows.Forms.FormClosingEventHandler(this.Closing);（.Net2.0 是FormClosing系统事件），在Closing()函数里面，发送Close字符给服务端，服务器判断循环判断所有的连接上的客户端传来的信息， 如果是以Close开头，断开与其的连接。看到这里，读者就会问了，如果我在聊天窗口输入Close是不是也断开连接呢？不是的，在聊天窗口输入的信息传 给服务器的时候开头都要加上Ip信息和昵称，所以不会冲突。&nbsp; </p>
<p><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/dzfb/archive/2006/12/21/1452139.aspx">http://blog.csdn.net/dzfb/archive/2006/12/21/1452139.aspx</a><a href="http://blog.csdn.net/dzfb/archive/2006/12/21/1452139.aspx"></a></p>
<img src ="http://www.cppblog.com/Lee7/aggbug/102299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-11-30 19:17 <a href="http://www.cppblog.com/Lee7/archive/2009/11/30/102299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#中Setting.setting的使用</title><link>http://www.cppblog.com/Lee7/archive/2009/11/26/102000.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Thu, 26 Nov 2009 12:00:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/11/26/102000.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/102000.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/11/26/102000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/102000.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/102000.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: medium"><span style="COLOR: #3366ff"><font size=3>1、定义</font></span></span></p>
<p><span style="FONT-SIZE: medium"><font size=3>在Settings.settings文件中定义配置字段。把作用范围定义为：User则运行时可更改，Applicatiion则运行时不可更改。可以使用数据网格视图，很方便；</font></span></p>
<p><span style="FONT-SIZE: medium"><span style="COLOR: #3366ff"><font size=3>2、读取配置值</font></span></span></p>
<p><span style="FONT-SIZE: medium"><font size=3>text1.text = Properties.Settings.Default.FieldName;<br>//FieldName是你定义的字段</font></span></p>
<p><span style="FONT-SIZE: medium"><span style="COLOR: #3366ff"><font size=3>3、修改和保存配置</font></span></span></p>
<p><span style="FONT-SIZE: medium"><font size=3>Properties.Settings.Default.FieldName = "server";<br></font></span></p>
<p><span style="FONT-SIZE: medium"><font size=3>Properties.Settings.Default.Save();//使用Save方法保存更改</font></span></p>
<p><span style="FONT-SIZE: medium"><font size=3>注意：当设置scope为User时他的配置放在 C:\Documents and Settings\LocalService\Local Settings\Application Data\在这个目录下或子目录user.config 配置文件中。</font><br></span></p>
<img src ="http://www.cppblog.com/Lee7/aggbug/102000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-11-26 20:00 <a href="http://www.cppblog.com/Lee7/archive/2009/11/26/102000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# 装箱和拆箱[转] </title><link>http://www.cppblog.com/Lee7/archive/2009/09/27/97361.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Sun, 27 Sep 2009 06:45:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/09/27/97361.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/97361.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/09/27/97361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/97361.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/97361.html</trackback:ping><description><![CDATA[1、<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;装箱和拆箱是一个抽象的概念 <br>2、<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;装箱是将<span style="COLOR: #0000ff">值类型</span>转换为<span style="COLOR: #0000ff">引用类型</span> ；拆箱是将<span style="COLOR: #0000ff">引用类型</span>转换为<span style="COLOR: #0000ff">值类型</span>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;利用装箱和拆箱功能，可通过允许<span style="COLOR: red">值类型</span>的任何值与<span style="COLOR: red">Object 类型</span>的值相互转换，将值类型与引用类型链接起来 <br>例如： <br>int val = 100; <br>object obj = val; <br>Console.WriteLine (&#8220;对象的值 = {0}", obj); <br>这是一个装箱的过程，是将<span style="COLOR: red">值类型</span>转换为<span style="COLOR: red">引用类型</span>的过程 <br><br>int val = 100; <br>object obj = val; <br>int num = (int) obj; <br>Console.WriteLine ("num: {0}", num); <br>这是一个拆箱的过程，是将值类型转换为引用类型，再由引用类型转换为值类型的过程 <br><br>注：被装过箱的对象才能被拆箱<br>3、<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET中，数据类型划分为<span style="COLOR: #0000ff">值类型</span>和<span style="COLOR: #0000ff">引用</span>(不等同于C++的指针)<span style="COLOR: #0000ff">类型</span>，与此对应，内存分配被分成了两种方式，一为栈，二为堆，注意：是托管堆。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;值类型只会在栈中分配。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;引用类型分配内存与托管堆。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;托管堆对应于垃圾回收。<br><br>
<p><strong>4：装箱/拆箱是什么？ <br></strong>装箱：用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。 <br>拆箱：从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。 </p>
<p><strong>5：为何需要装箱？(为何要将值类型转为引用类型？) <br></strong>一种最普通的场景是，调用一个含类型为Object的参数的方法，该Object可支持任意为型，以便<span style="COLOR: red">通用</span>。当你需要将一个值类型(如Int32)传入时，需要装箱。 <br>另一种用法是，一个非泛型的容器，同样是为了保证通用，而将元素类型定义为Object。于是，要将值类型数据加入容器时，需要装箱。 </p>
<p><strong>6：装箱/拆箱的内部操作。 <br></strong>装箱： <br>对值类型在堆中分配一个对象实例，并将该值复制到新的对象中。按三步进行。 <br>第一步：新分配托管堆内存(大小为值类型实例大小加上一个方法表指针和一个SyncBlockIndex)。 <br>第二步：将值类型的实例字段拷贝到新分配的内存中。 <br>第三步：返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。 <br>有人这样理解：如果将Int32装箱，返回的地址，指向的就是一个Int32。我认为也不是不能这样理解，但这确实又有问题，一来它不全面，二来指向Int32并没说出它的实质(在托管堆中)。 <br>拆箱：<br>检查对象实例，确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。 <br>有书上讲，拆箱只是获取引用对象中指向值类型部分的指针，而内容拷贝则是赋值语句之触发。我觉得这并不要紧。最关键的是检查对象实例的本质，拆箱和装箱的类型必需匹配，这一点上，在IL层上，看不出原理何在，我的猜测，或许是调用了类似GetType之类的方法来取出类型进行匹配(因为需要严格匹配)。 </p>
<p><strong>7：装箱/拆箱对执行效率的影响 <br></strong>显然，从原理上可以看出，装箱时，生成的是全新的引用对象，这会有时间损耗，也就是造成效率降低。 <br>那该如何做呢？ <br>首先，应该尽量避免装箱。 <br>比如上例2的两种情况，都可以避免，在第一种情况下，可以通过重载函数来避免。第二种情况，则可以通过泛型来避免。 <br>当然，凡事并不能绝对，假设你想改造的代码为第三方程序集，你无法更改，那你只能是装箱了。 <br>对于装箱/拆箱代码的优化，由于C#中对装箱和拆箱都是隐式的，所以，根本的方法是对代码进行分析，而分析最直接的方式是了解原理结何查看反编译的IL代码。比如：在循环体中可能存在多余的装箱，你可以简单采用提前装箱方式进行优化。 </p>
<p><strong>8：对装箱/拆箱更进一步的了解 <br></strong>装箱/拆箱并不如上面所讲那么简单明了，比如：装箱时，变为引用对象，会多出一个方法表指针，这会有何用处呢？ <br>我们可以通过示例来进一步探讨。 <br>举个例子。 <br>Struct A : ICloneable <br>{ <br>public Int32 x; <br>public override String ToString() { <br>return String.Format(&#8221;{0}&#8221;,x); <br>} <br>public object Clone() { <br>return MemberwiseClone(); <br>} <br>} <br>static void main() <br>{ <br>A a; <br>a.x = 100; <br>Console.WriteLine(a.ToString()); <br>Console.WriteLine(a.GetType()); <br>A a2 = (A)a.Clone(); <br>ICloneable c = a2; <br>Ojbect o = c.Clone(); <br>} <br>5.0：a.ToString()。编译器发现A重写了ToString方法，会直接调用ToString的指令。因为A是值类型，编译器不会出现多态行为。因此，直接调用，不装箱。(注：ToString是A的基类System.ValueType的方法) <br>5.1：a.GetType()，GetType是继承于System.ValueType的方法，要调用它，需要一个方法表指针，于是a将被装箱，从而生成方法表指针，调用基类的System.ValueType。(补一句，所有的值类型都是继承于System.ValueType的)。 <br>5.2：a.Clone()，因为A实现了Clone方法，所以无需装箱。 <br>5.3：ICloneable转型：当a2为转为接口类型时，必须装箱，因为接口是一种引用类型。 <br>5.4：c.Clone()。无需装箱，在托管堆中对上一步已装箱的对象进行调用。 <br>附：其实上面的基于一个根本的原理，因为未装箱的值类型没有方法表指针，所以，不能通过值类型来调用其上继承的虚方法。另外，接口类型是一个引用类型。对此，我的理解，该方法表指针类似C++的虚函数表指针，它是用来实现引用对象的多态机制的重要依据。 </p>
<p><strong>9：如何更改已装箱的对象 <br></strong>对于已装箱的对象，因为无法直接调用其指定方法，所以必须先拆箱，再调用方法，但再次拆箱，会生成新的栈实例，而无法修改装箱对象。有点晕吧，感觉在说绕口令。还是举个例子来说：(在上例中追加change方法) <br>public void Change(Int32 x) { <br>this.x = x; <br>} <br>调用： <br>A a = new A(); <br>a.x = 100; <br>Object o = a; //装箱成o，下面，想改变o的值。 <br>((A)o).Change(200); //改掉了吗？没改掉。 <br>没改掉的原因是o在拆箱时，生成的是临时的栈实例A，所以，改动是基于临时A的，并未改到装箱对象。 <br>(附：在托管C++中，允许直接取加拆箱时第一步得到的实例引用，而直接更改，但C#不行。) <br>那该如何是好？ <br>嗯，通过接口方式，可以达到相同的效果。 <br>实现如下： <br>interface IChange { <br>void Change(Int32 x); <br>} <br>struct A : IChange { <br>&#8230; <br>} <br>调用： <br>((IChange)o).Change(200);//改掉了吗？改掉了。 <br>为啥现在可以改？ <br>在将o转型为IChange时，这里不会进行再次装箱，当然更不会拆箱，因为o已经是引用类型，再因为它是IChange类型，所以可以直接调用Change，于是，更改的也就是已装箱对象中的字段了，达到期望的效果。<br></ca><br><strong>10、</strong>--------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将值类型转换为引用类型，需要进行装箱操作(boxing)：</p>
<p>1、首先从托管堆中为新生成的引用对象分配内存。</p>
<p>2、然后将值类型的数据拷贝到刚刚分配的内存中。</p>
<p>3、返回托管堆中新分配对象的地址。</p>
<p>可以看出，进行一次装箱要进行分配内存和拷贝数据这两项比较影响性能的操作。</p>
<p>将引用内型转换为值内型，需要进行拆箱操作(unboxing)：</p>
<p>1、首先获取托管堆中属于值类型那部分字段的地址，这一步是严格意义上的拆箱。</p>
<p>2、将引用对象中的值拷贝到位于线程堆栈上的值类型实例中。</p>
<p>经过这2步，可以认为是同boxing是互反操作。严格意义上的拆箱，并不影响性能，但伴随这之后的拷贝数据的操作就会同boxing操作中一样影响性能。<br><br><strong>11、</strong>-------------------------<br>NET的所有类型都是由基类System.Object继承过来的，包括最常用的基础类型：int, byte, short，bool等等，就是说所有的事物都是对象。如果申明这些类型得时候都在堆(HEAP)中分配内存，会造成极低的效率！(个中原因以及关于堆和栈得区别会在另一篇里单独得说说！)<br>.NET如何解决这个问题得了？正是通过将类型分成值型(<span style="COLOR: purple">value</span>)和引用型(<span style="COLOR: purple">regerencetype</span>)，C#中定义的值类型包括原类型（<span style="COLOR: green">Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal</span>）、枚举(<span style="COLOR: green">enum</span>)、结构(<span style="COLOR: green">struct</span>)，引用类型包括：类、数组、接口、委托、字符串等。<br>值型就是在栈中分配内存，在申明的同时就初始化，以确保数据不为NULL；<br>引用型是在堆中分配内存，初始化为null，引用型是需要GARBAGE COLLECTION来回收内存的，值型不用，超出了作用范围，系统就会自动释放！<br>下面就来说装箱和拆箱的定义！<br>装箱就是隐式的将一个值型转换为引用型对象。比如：<br><span style="COLOR: green">int i=0;<br>Syste.Object obj=i;</span><br>这个过程就是装箱！就是将i装箱！<br>拆箱就是将一个引用型对象转换成任意值型！比如：<br><span style="COLOR: green">int i=0;<br>System.Object obj=i;<br>int j=(int)obj;</span><br>这个过程前2句是将i装箱，后一句是将obj拆箱！</p>
<img src ="http://www.cppblog.com/Lee7/aggbug/97361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-09-27 14:45 <a href="http://www.cppblog.com/Lee7/archive/2009/09/27/97361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装VS2008注意拉！</title><link>http://www.cppblog.com/Lee7/archive/2009/09/03/95220.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Thu, 03 Sep 2009 08:16:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/09/03/95220.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/95220.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/09/03/95220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/95220.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/95220.html</trackback:ping><description><![CDATA[<p>花了一天多时间终于安装好了VS2008，而且是在 xp 和Vista2种系统下都安装了,其实开始是失败的,找了好多资料才找到原因,VS2008安装之前需要在"服务"中启动以下2项服务:<br>Distributed Transaction Coordinator</p>
<p>WMI Performance Adapter<br><br>默认此2项服务是禁止的!</p>
<img src ="http://www.cppblog.com/Lee7/aggbug/95220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-09-03 16:16 <a href="http://www.cppblog.com/Lee7/archive/2009/09/03/95220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC6.0实现鼠标显示按钮功能提示文本</title><link>http://www.cppblog.com/Lee7/archive/2009/07/16/90229.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Thu, 16 Jul 2009 07:04:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/07/16/90229.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/90229.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/07/16/90229.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/90229.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/90229.html</trackback:ping><description><![CDATA[<div class="Section0">
<p class="p0" style="margin-bottom: 5pt; margin-top: 5pt; line-height: 140%;"><span style="font-size: 9pt; font-family: 'Times New Roman';">本文以</span><span><a  href="http://www.itwis.com/html/c/ctool/"><span style="color: #0000ff; text-decoration: underline; font-size: 9pt; font-family: 'Times New Roman';">VC6.0</span></a></span><span style="font-size: 9pt; font-family: 'Times New Roman';">对话框应用程序为例，当鼠标在按钮上移动、按下或者弹起时显示按钮功能提示文本，本文将在按钮上显示功能提示文本：<font face="Times New Roman">&#8220;IT</font><font face="宋体">知道网</font><font face="Times New Roman">&#8221;</font><font face="宋体">。</font></span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">在<font face="Times New Roman">CXXXDlg.h</font><font face="宋体">文件中定义：</font></span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">public:</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;&nbsp;CToolTipCtrl&nbsp;m_openToolTip;&nbsp;</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">在<font face="Times New Roman">CXXXDlg.cpp</font><font face="宋体">的</font><font face="Times New Roman">OnInitDialog()</font><font face="宋体">中初始化：&nbsp;</font></span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;m_openToolTip.Create(this);&nbsp;</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;m_openToolTip.AddTool(&nbsp;GetDlgItem(IDC_BOTTON),&nbsp;"IT<font face="宋体">知道网</font><font face="Times New Roman">"&nbsp;);</font></span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;m_openToolTip.SetDelayTime(200);</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;m_openToolTip.SetTipTextColor(&nbsp;#0000ff&nbsp;);</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;m_openToolTip.SetTipBkColor(&nbsp;#ffffff);</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;m_openToolTip.Activate(TRUE);</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">重载函数<font face="Times New Roman">PreTranslateMessage</font></span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">BOOL&nbsp;CXXXDlg::PreTranslateMessage(MSG*&nbsp;pMsg)</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">{</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;//&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;specialized&nbsp;code&nbsp;here&nbsp;and/or&nbsp;call&nbsp;the&nbsp;base&nbsp;class</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;switch(pMsg-&gt;message)</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;{</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;case&nbsp;WM_LBUTTONDOWN:</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;case&nbsp;WM_LBUTTONUP:</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;case&nbsp;WM_MOUSEMOVE:</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;&nbsp;m_openToolTip.RelayEvent(pMsg);</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;}</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><o:p></o:p></span></p>
<p class="p0" style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 9pt; font-family: 'Times New Roman';">&nbsp;return&nbsp;CDialog::PreTranslateMessage(pMsg);</span><span style="font-size: 9pt; font-family: 'Times New Roman';"><br></span><span style="font-size: 9pt; font-family: 'Times New Roman';">}&nbsp;</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';"><o:p></o:p></span></p>
</div><img src ="http://www.cppblog.com/Lee7/aggbug/90229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-07-16 15:04 <a href="http://www.cppblog.com/Lee7/archive/2009/07/16/90229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]如何安装EVC以及如何配置EVC(含EVC序列号)</title><link>http://www.cppblog.com/Lee7/archive/2009/07/14/90023.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Tue, 14 Jul 2009 06:20:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/07/14/90023.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/90023.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/07/14/90023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/90023.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/90023.html</trackback:ping><description><![CDATA[<p><font size="3">因为最近在学习嵌入式在WinCE平台的开发</font></p>
<p><font size="3">所以需要在机器上安装了EVC4.0和SP4，结果运行程序出现： <br>"One or more
files from the Emulator for Windows CE installation is missing. Please
reinstall Emulator for Windows CE and try again." <br><br>解决办法：按照上面的方法进入设备管理器－＞高级－＞启动和故障恢复(选择设置)-&gt;在启动和故障恢复对话框中选择编辑-&gt; 将boot.ini 中noexcute修改为execute 然后重启机器就可以了。 到此我们已经完成开发环境的搭建。</font></p>
<p><font size="3">微软建议的安装步骤安装:<br>ActiveSync-&gt;eVC4-&gt;eVC4 sp4-&gt;smartphone SDK-&gt;.net framework-&gt;模拟器images；在进行安装前，建议您先查看注意事项。</font></p>
<p><font size="3">开发工具下载地址</font></p>
<p><font size="3"><strong>1</strong>，eVC4.0,下载地址：<br></font><a  href="http://download.microsoft.com/download/c/3/f/c3f8b58b-9753-4c2e-8b96-2dfe3476a2f7/eVC4.exe"><font color="#0000ff" size="3"><u>http://download.microsoft.com/download/c/3/f/c3f8b58b-9753-4c2e-8b96-2dfe3476a2f7/eVC4.exe</u></font></a><br><a  href="http://download.microsoft.com/download/a/7/3/a735c7fb-dcbd-429f-9090-d09b3b15d3fa/evc4sp4.exe"><u><font color="#0000ff" size="3">http://download.microsoft.com/download/a/7/3/a735c7fb-dcbd-429f-9090-d09b3b15d3fa/evc4sp4.exe</font></u></a><br><font size="3">eVC序列号：TRT7H-KD36T-FRH8D-6QH8P-VFJHQ</font></p>
<p><font size="3"><strong>2</strong>，smartphone SDK，packet PC SDK下载地址：</font></p>
<p><font size="3">smartphone 2003 SDK:<br></font><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A6C4F799-EC5C-427C-807C-4C0F96765A81&amp;displaylang=en"><u><font color="#800080" size="3">http://www.microsoft.com/downloads/details.aspx?FamilyId=A6C4F799-EC5C-427C-807C-4C0F96765A81&amp;displaylang=en</font></u></a></p>
<p><font size="3">packet PC 2003 SDK:<br></font><a  href="http://microsoft.com/downloads/details.aspx?FamilyId=9996B314-0364-4623-9EDE-0B5FBB133652&amp;displaylang=en"><u><font color="#0000ff" size="3">http://microsoft.com/downloads/details.aspx?FamilyId=9996B314-0364-4623-9EDE-0B5FBB133652&amp;displaylang=en</font></u></a></p>
<p><font size="3"><strong>3</strong>,中文image文件下载：<br>smart phone：<br></font><a  href="http://www.microsoft.com/downloads/info.aspx?na=46&amp;p=1&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=2c144e09-7e75-4275-a6bb-1c3cd55369c5&amp;genscs=0&amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f6%2fb%2f8%2f6b8d7515-0d0a-4d03-b11c-b31886fbb9ff%2fWindows+Mobile+2003+Second+Edition+Emulator+Images+for+Smartphone+-+CHS.msi"><u><font color="#800080" size="3">http://www.microsoft.com/downloads/info.aspx?na=46&amp;p=1&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=2c144e09-7e75-4275-a6bb-1c3cd55369c5&amp;genscs=0&amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f6%2fb%2f8%2f6b8d7515-0d0a-4d03-b11c-b31886fbb9ff%2fWindows+Mobile+2003+Second+Edition+Emulator+Images+for+Smartphone+-+CHS.msi</font></u></a></p>
<p><font size="3">packet PC<br></font><a  href="http://download.microsoft.com/download/e/2/8/e28792ca-d04b-407b-9b18-75b9128f0cc9/Windows%20Mobile%202003%20Second%20Edition%20Emulator%20Images%20for%20Pocket%20PC%20-%20CHS.msi"><u><font color="#800080" size="3">http://download.microsoft.com/download/e/2/8/e28792ca-d04b-407b-9b18-75b9128f0cc9/Windows%20Mobile%202003%20Second%20Edition%20Emulator%20Images%20for%20Pocket%20PC%20-%20CHS.msi</font></u></a></p>
<p><font size="3"><strong>4</strong>，安装image文件，安装完后你并没有发现你的模拟器变成中文的，这时需要如下操作：</font></p>
<font size="3"><span class="tpc_content">C:\Program Files\Pocket PC 2003 Emulation\CHS\Pocket_PC\PPC_2003_CHS.bin<br><br>把这个文件改个名称为PPC_2003_WWE.bin,然后替换下面这个目录下的文件此文件<br>C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\PPC_2003_WWE.bin<br><br>EVC中设置：<br></span>a,打开eVC，选择tools--&gt;Platform Manager Configuration<br>b,点Add Device,起一个名字，然后点properties.在Transpor中选择"TCP/IP ....",StartUp用默认的"Emulator Startup Server"<br>c,点StartUp右边的Configuration,在image中选择"CHS SP 2003 SE(Virtual Radio)",然后一路OK点回去。就可以在eVC的编译工具栏选择中文模拟器了。而且可以中英随意切换<br></font>
<p><font size="3"><strong>5,注意事项：</strong><br>要保证你的VBS脚本服务器能正常运行，网上很多人装不
成功，都是因为VBS脚本没有正常执行。如果你装了超级解霸，一定要注意，因为超级解霸会更改
VBS文件的打开方式，最好是把解霸先卸载，卸载后再进入&#8220;文件夹选项&#8221;的&#8220;文件类型&#8221;中恢复VBS的默认打开方式。手动更改打开方式好像不行。<br>如果你安装完后，发现这个错误：CVTRES : fatal error CVT1102: out of memory。请用安装目录下面的\Common\EVC\Bin\CVTRES.EXE覆盖EVC\wce420\bin\下面的同名文件试试</font></p>
<p><font size="3">其中Chinese (Simplified) Emulation Images（是Pocket PC
2003
SDK的中文印象文件）不能显示中文的问题把英文模拟器对应的快捷方式放到中文模拟器的目录下，改一下里面的SKIN和BIN文件路径，运行一下，再把
EVC打开，在configure platform manager中设置一下连到中文模拟器上就可以了。</font></p>
<p><br></p>
<p><font size="3">转自:http://www.2guys.cn/collection/17461620481620.html<br></font></p><img src ="http://www.cppblog.com/Lee7/aggbug/90023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-07-14 14:20 <a href="http://www.cppblog.com/Lee7/archive/2009/07/14/90023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Windows Mobile(Win CE)开发工具下载</title><link>http://www.cppblog.com/Lee7/archive/2009/07/14/90018.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Tue, 14 Jul 2009 06:13:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/07/14/90018.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/90018.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/07/14/90018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/90018.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/90018.html</trackback:ping><description><![CDATA[<strong><font color="#ffffff">Windows Mobile(</font></strong>
<p><font size="3">经常有朋友想学习 Windows Mobile
开发，体验移动开发的乐趣，但不知道从哪里下载各种开发工具和学习资料。于是我整理了一个列表，里面包含了各个版本的 Windows Mobile
SDK, .NET Compact Framework, SQL Server CE, Device Emulator, Emulator
Image 和学习资料的下载链接。<br><br>如果你发现还有其他不错的工具没有在这个列表中，请告诉我，我会把它加入到这个列表中，让更多的人用上。<br></font></p>
<h2><font size="3">1) Software Development Kit</font></h2>
<p><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9996b314-0364-4623-9ede-0b5fbb133652&amp;DisplayLang=en" title="This version of the pocket pc 2003 sdk allows you to create pocket pc 2003 applications using embedded visual c++ 4.0 (with service pack 3), and applications written in c# or visual basic .net using visual studio .net 2003." target="_blank"><font color="#56b6e9" size="3">Windows Mobile 2003 SDK for Pocket PC</font></a><font size="3">&nbsp;(</font><a  href="http://blog.pdafans.com/link.php?url=http://download.microsoft.com%2Fdownload%2F6%2F9%2F5%2F69570242-44e8-45e6-a252-9bd56db8ec83%2FMicrosoft%2520Pocket%2520PC%25202003%2520SDK.msi" target="_blank"><font color="#56b6e9" size="3">直接下载</font></a><font size="3">)<br></font><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=A6C4F799-EC5C-427C-807C-4C0F96765A81&amp;displaylang=en" title="Build applications for windows mobile 2003-based smartphones leveraging the microsoft&#174; .net compact framework, windows ce. net 4.2, an improved emulator and new atl support." target="_blank"><font color="#56b6e9" size="3">Windows Mobile 2003 SDK for Smartphone</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=83A52AF2-F524-4EC5-9155-717CBE5D25ED&amp;displaylang=en" title="The windows mobile 5.0 sdk for pocket pc extends visual studio 2005 so that you can write managed and native application software targeting windows mobile 5.0 based pocket pc devices." target="_blank"><font color="#56b6e9" size="3">Windows Mobile 5.0 SDK for Pocket PC</font></a><font size="3">&nbsp;(</font><a  href="http://blog.pdafans.com/link.php?url=http://download.microsoft.com%2Fdownload%2Fd%2F2%2Fe%2Fd2e43e33-53b0-45b6-ba70-fe6fdc4aa5bb%2FWindows%2520Mobile%25205.0%2520Pocket%2520PC%2520SDK.msi" target="_blank"><font color="#56b6e9" size="3">直接下载</font></a><font size="3">)<br></font><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=DC6C00CB-738A-4B97-8910-5CD29AB5F8D9&amp;displaylang=en" title="The windows mobile 5.0 sdk for smartphone extends visual studio 2005 so that you can write managed and native application software targeting windows mobile 5.0 based smartphone devices." target="_blank"><font color="#56b6e9" size="3">Windows Mobile 5.0 SDK for Smartphone</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=06111A3A-A651-4745-88EF-3D48091A390B&amp;displaylang=en" title="The windows mobile 6 sdks add documentation, sample code, header and library files, emulator images and tools to visual studio that let you build applications for windows mobile 6." target="_blank"><font color="#56b6e9" size="3">Windows Mobile 6 SDK</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=FA1A3D66-3F61-4DDC-9510-AE450E2318C3&amp;displaylang=en" title="The Windows CE 5.0: Standard SDK, in conjunction with the Microsoft eMbedded Visual C++ 4.0 SP4, deliver a complete development environment for creating applications for devices based on Microsoft&#174; Windows&#174; CE 5.0."><font color="#56b6e9" size="3">Windows CE 5.0: Standard Software Development Kit (SDK)<br></font></a><br></p>
<h2><font size="3">2) .NET Compact Framework</font></h2>
<p><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a5a02311-194b-4c00-b445-f92bec03032f&amp;displaylang=en" title="The microsoft&#174; .net compact framework 1.0 sp3 redistributable includes everything you need to run .net compact framework applications, including the common language runtime and the .net compact framework class library." target="_blank"><font color="#56b6e9" size="3">.NET Compact Framework 1.0 SP3 Redistributable</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=0C1B0A88-59E2-4EBA-A70E-4CD851C5FCC4&amp;displaylang=en" title="The microsoft&#174; .net compact framework 2.0 service pack 1 redistributable includes everything you need to run .net compact framework 1.0 and 2.0 applications." target="_blank"><font color="#56b6e9" size="3">.NET Compact Framework 2.0 Service Pack 1 Redistributable</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=7BEFD787-9B5E-40C6-8D10-D3A43E5856B2&amp;displaylang=en" title="The microsoft&#174; .net compact framework 2.0 service pack 1 patch includes everything you need to update the .net compact framework 2.0 to the .net compact framework 2.0 sp1." target="_blank"><font color="#56b6e9" size="3">.NET Compact Framework 2.0 Service Pack 1 Patch</font></a><a  href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=aea55f2f-07b5-4a8c-8a44-b4e1b196d5c0" title="The microsoft&#174; .net compact framework 2.0 service pack 2 redistributable includes everything you need to run .net compact framework 1.0 and 2.0 applications." target="_blank"><br><font color="#56b6e9" size="3">.NET Compact Framework 2.0 Service Pack 2 Redistributable</font></a><br><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3FFamilyID%3De3821449-3c6b-42f1-9fd9-0041345b3385%26amp%3Bdisplaylang%3Den" target="_blank"><font color="#56b6e9" size="3">.NET Compact Framework 3.5 Redistributable<br></font></a><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3FFamilyId%3DC8174C14-A27D-4148-BF01-86C2E0953EAB%26amp%3Bdisplaylang%3Den"><font color="#56b6e9" size="3">Power Toys for .NET Compact Framework 3.5</font></a><br></p>
<h2><font size="3">3) SQL Server CE</font></h2>
<p><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=79071E22-52F5-4189-998E-FD03648FD3F4&amp;displaylang=en" title="SQL server 2000 windows ce edition (sql server ce) version 2.0 is the compact database for rapidly developing applications in both native mode and the .net compact framework that extend enterprise data management capabilities to devices.
companies and users of sql server ce that have upgraded sql server 2000 database and publisher servers to the service pack 4 (sp4) release should also update the server replication components on servers running internet information services (iis).
this release of sql server ce server tools updates the servers running iis to support connectivity solutions to sql server 2000 sp4 databases." target="_blank"><font color="#56b6e9" size="3">SQL Server CE 2.0&nbsp;Server&nbsp;Tools&nbsp;SP4</font></a><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=85e0c3ce-3fa1-453a-8ce9-af6ca20946c3&amp;DisplayLang=en" title="Microsoft sql server 2005 compact edition (sql server compact edition) is designed for developers who need light weight, in process relational database solution for their applications that can be developed and deployed on desktop as well as on mobile devices." target="_blank"><br><font color="#56b6e9" size="3">SQL Server 2005 Compact Edition</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=877C0ADC-0347-4A47-B842-58FB71D159AC&amp;displaylang=en" title="Microsoft sql server 2005 compact edition tools for visual studio 2005 software updates the microsoft visual studio 2005 sp1 smart device development components with the design time environment for microsoft sql server 2005 compact edition." target="_blank"><font color="#56b6e9" size="3">SQL Server 2005 Compact Edition Tools for Visual Studio 2005 Service Pack 1</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyId=4E45F676-E69A-4F7F-A016-C1585ACF4310&amp;displaylang=en" title="Microsoft sql server 2005 compact edition server tools updates the servers running iis to support connectivity solutions from sql server 2005 compact edition database on a mobile device or a desktop or a tablet pc to database servers running sql server 2000 sp3a and above versions." target="_blank"><font color="#56b6e9" size="3">SQL Server 2005 Compact Edition Server Tools<br></font></a><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E6BC81E8-175B-46EA-86A0-C9DACAA84C85&amp;displaylang=en" title="SQL server compact edition (ssce) books online and readme." target="_blank"><font color="#56b6e9" size="3">SQL Server 2005 Compact Edition Books Online (March 2007)<br></font></a><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B967347A-5DD0-445C-8A9F-AEA3DB9EC4BC&amp;displaylang=en" title="Microsoft sql server 2005 compact edition access database synchronizer provides a way to synchronize data between microsoft access database on a desktop and microsoft sql server 2005 compact edition database on a device." target="_blank"><font color="#56b6e9" size="3">SQL Server 2005 Compact Edition Access Database Synchronizer</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7849b34f-67ab-481f-a5a5-4990597b0297&amp;displaylang=en" class="" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7849b34f-67ab-481f-a5a5-4990597b0297&amp;displaylang=en"><font color="#56b6e9" size="3">SQL Server Compact 3.5 for Windows Desktop</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1ff0529a-eb1f-4044-b4b7-40b00710f7b7&amp;displaylang=en" class="" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1ff0529a-eb1f-4044-b4b7-40b00710f7b7&amp;displaylang=en"><font color="#56b6e9" size="3">SQL Server Compact 3.5 Books Online and Samples</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyId=02989F70-49AA-43D7-81B8-A651120F8D65&amp;displaylang=en" class="" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=02989F70-49AA-43D7-81B8-A651120F8D65&amp;displaylang=en"><font color="#56b6e9" size="3">Synchronization Services for ADO.NET Books Online<br></font></a><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3FFamilyID%3D6b422cc8-888d-4e92-b92c-c2534024ddbc%26amp%3Bdisplaylang%3Den" target="_blank"><font color="#56b6e9" size="3">ADOCE 3.1 for Windows 3.0 SDKs</font></a></p>
<h2><font size="3">4) Device Emulator</font></h2>
<p><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=C62D54A5-183A-4A1E-A7E2-CC500ED1F19A&amp;displaylang=en" title="The microsoft device emulator 1.0 is a standalone version of the same arm based device emulator that ships as part of visual studio 2005. the standalone emulator is intended for situations when you want to demonstrate or test your application on a computer that does not have visual studio 2005 installed. in addition, we are offering the windows mobile 5.0 msfp operating system images that you can use with the device emulator." target="_blank"><font color="#56b6e9" size="3">Standalone Device Emulator 1.0 with Windows Mobile OS Images</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=dd567053-f231-4a64-a648-fea5e7061303&amp;DisplayLang=en" title="Microsoft device emulator 2.0 is the second publicly released version of the device emulator for arm-based devices. this emulator is also being released with the windows mobile 6 sdk and the adaptation kit (ak) releases of windows mobile 6 and windows embedded ce 6.0." target="_blank"><font color="#56b6e9" size="3">Microsoft Device Emulator 2.0 Standalone</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=DC8332D6-565F-4A57-BE8C-1D4718D3AF65&amp;displaylang=en" title="The virtual machine network driver allows the device emulator's os (or even the virtual pc os, as the case may be) to emulate its own network connection. because the physical network interface on the host machine is now &quot;virtualized,&quot; you have a way to get two ip addresses - one for the host pc, and one for the operating system that is running within the device emulator (or virtual pc). device emulator users using the vmnet driver can connect to the host machine over tcp or udp as the alternative to the standard &quot;activesync over dma&quot; solution." target="_blank"><font color="#56b6e9" size="3">Virtual Machine Network Driver for Microsoft Device Emulator</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=A120E012-CA31-4BE9-A3BF-B9BF4F64CE72&amp;displaylang=en" title="The device emulator contains the emulator technologies featured in windows ce 5.0. by using the device emulator, you can run emulated-based images created by windows ce 5.0 without installing platform. builder, its platform. development tool." target="_blank"><font color="#56b6e9" size="3">Microsoft Windows CE 5.0 Device Emulator</font></a><br><br></p>
<h2><font size="3">5) Emulator Image</font></h2>
<p><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=57265402-47a8-4ce4-9aa7-5fe85b95de72&amp;DisplayLang=en" title="Emulator images that allow you to test your applications in all available pocket pc 2003 languages." target="_blank"><font color="#56b6e9" size="3">Emulator Images for Windows Mobile 2003-based Pocket PC Development</font></a><font size="3">&nbsp;<br></font><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8fe677fa-3a6a-4265-b8eb-61a628ecd462&amp;DisplayLang=en" title="Emulator images that allow you to test your applications in all available smartphone 2003 localizations." target="_blank"><font color="#56b6e9" size="3">Emulator Images for Windows Mobile 2003-based Smartphone Development</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4953d34d-692f-4c87-ac69-cb235dbdad1d&amp;DisplayLang=en" title="Download new Emulator Images that allow you to test your applications in all available Pocket PC 2003 Second Edition languages."><font color="#56b6e9" size="3">Emulator Images for Windows Mobile 2003 Second Edition-based Pocket PC Development</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2c144e09-7e75-4275-a6bb-1c3cd55369c5&amp;DisplayLang=en" title="Download new Emulator Images that allow you to test your applications in all available Smartphone 2003 Second Edition localizations."><font color="#56b6e9" size="3">Emulator Images for Windows Mobile 2003 Second Edition-based Smartphone Development</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=EEC33AE3-C129-4C25-ABAA-18E8E842178F&amp;displaylang=en" title="Emulator images that allow you to test your applications in all available wm5.0 pocket pc localizations." target="_blank"><font color="#56b6e9" size="3">Localized Windows Mobile 5.0 Pocket PC Emulator Images</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=52FED581-8F8D-4C46-9966-4832098191B7&amp;displaylang=en" title="Emulator images that allow you to test your applications in all available wm5.0 smartphone localizations." target="_blank"><font color="#56b6e9" size="3">Localized Windows Mobile 5.0 Smartphone Emulator Images</font></a></p>
<h2><font size="3">6) eMbedded Visual C++</font></h2>
<p><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=1DACDB3D-50D1-41B2-A107-FA75AE960856&amp;displaylang=en" title="The microsoft&#174; embedded visual c++ 4.0 tool delivers a complete desktop development environment for creating applications and system components for windows&#174; ce .net-powered devices." target="_blank"><font color="#56b6e9" size="3">eMbedded Visual C++ 4.0</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4a4ed1f4-91d3-4dbe-986e-a812984318e5&amp;DisplayLang=en" title="Service pack 4 (sp4) allows embedded visual c++ 4.0 users to target windows ce 5.0 based devices." target="_blank"><font color="#56b6e9" size="3">eMbedded Visual C++ 4.0 SP4</font></a><br></p>
<h2><font size="3">7) OpenNETCF</font></h2>
<p><a  href="http://blog.pdafans.com/link.php?url=http://www.opennetcf.org%2FPermaLink.aspx%3Fguid%3D3a013afd-791e-45ef-802a-4c1dbe1cfef9" target="_blank"><font color="#56b6e9" size="3">OpenNETCF Smart Device Framework v1.4</font></a><br><a  href="http://blog.pdafans.com/link.php?url=http://www.opennetcf.org%2FPermaLink.aspx%3Fguid%3De014642d-b028-451a-9cbd-fea5ab140462" target="_blank"><font color="#56b6e9" size="3">OpenNETCF Smart Device Framework v2.0</font></a><br></p>
<h2><font size="3">8) Mobile Client Software Factory</font></h2>
<p><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=f9176708-9f57-4c0f-97fb-f9c65a9bbf22&amp;displaylang=en" title="The mobile client software factory provides an integrated set of guidance that assists architects and developers in creating mobile line of business solutions." target="_blank"><font color="#56b6e9" size="3">Mobile Client Software Factory &#8211; July 2006<br></font></a><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3Ffamilyid%3D8a5a43ea-dd75-425b-b05c-1aa3a0e55420%26amp%3Bdisplaylang%3Den" target="_blank"><font color="#56b6e9" size="3">Architecture Overview for Mobile Applications</font></a><br><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3Ffamilyid%3D0d0c6b0e-a29a-4672-9cd0-a5a2622df913%26amp%3Bdisplaylang%3Den" target="_blank"><font color="#56b6e9" size="3">UI Design Considerations in Mobile Applications</font></a><br><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3Ffamilyid%3D3c406e26-70af-40f0-aa82-9ac924740368%26amp%3Bdisplaylang%3Den" target="_blank"><font color="#56b6e9" size="3">Designing Mobile Applications in an Occasionally-Connected World</font></a><font size="3"> </font></p>
<h2><font size="3">9) Other Tools</font></h2>
<p><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3FFamilyID%3D46f72df1-e46a-4a5f-a791-09f07aaa1914%26amp%3BDisplayLang%3Den" target="_blank"><font color="#56b6e9" size="3">Microsoft Windows Mobile Device Center 6.1 for Windows Vista (32-bit)<br></font></a><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3FFamilyID%3D4f68eb56-7825-43b2-ac89-2030ed98ed95%26amp%3BDisplayLang%3Den" target="_blank"><font color="#56b6e9" size="3">Microsoft Windows Mobile Device Center 6.1 for Windows Vista (64-bit)<br></font></a><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=9E641C34-6F7F-404D-A04B-DC09F8141141&amp;displaylang=en" title="Microsoft activesync 4.5 is the latest sync software release for windows mobile-powered devices. activesync provides a great synchronization experience with windows&#174;-powered pcs and microsoft outlook right out of the box." target="_blank"><font color="#56b6e9" size="3">Microsoft ActiveSync 4.5</font></a><br><a  href="http://blog.pdafans.com/link.php?url=http://www.microsoft.com%2Fdownloads%2Fdetails.aspx%3FFamilyID%3Dcdfd2bb2-fa13-4062-b8d1-4406ccddb5fd%26amp%3BDisplayLang%3Den" target="_blank"><font color="#56b6e9" size="3">Redistributable Server Components for Windows Mobile 5.0</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7e92628c-d587-47e0-908b-09fee6ea517a&amp;displaylang=en" title="Device security manager helps developers test various security policies for windows mobile devices." target="_blank"><font color="#56b6e9" size="3">Device Security Manager PowerToy for Windows Mobile 5.0</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=081c6401-49d4-4506-a03b-c41bc76c2f51&amp;DisplayLang=en" title="Network analyzer for windows mobile runs network utilities (e.g., ping and ipconfig) on a windows mobile powered device. network analyzer for windows mobile facilitates the troubleshooting of network connectivity issues." target="_blank"><font color="#56b6e9" size="3">Windows Mobile Network Analyzer PowerToy</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=35e9ef0f-833f-4987-9d1f-157a0a6a76e4&amp;displaylang=en" title="The microsoft smart devices remote tools framework is a powertoy for mobile and embedded system developers. the contents of this package demonstrate a new way of building mobile and embedded remote diagnostics/debugging tools in a unified shell." target="_blank"><font color="#56b6e9" size="3">Microsoft Smart Devices Remote Tools Framework Powertoy 1.0</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?familyid=74473FD6-1DCC-47AA-AB28-6A2B006EDFE9&amp;displaylang=en" title="The windows mobile developer power toys help you develop and test your windows mobile applications." target="_blank"><font color="#56b6e9" size="3">Windows Mobile Developer Power Toys</font></a><br>
</p>
<h2><font size="3">10) Resources</font></h2>
<a  href="http://www.microsoft.com/downloads/details.aspx?familyid=3BAA5B7D-04C1-4EC2-83DC-61B21EC5FE57&amp;displaylang=en" title="Everything you need to start developing for windows mobile 2003 and windows mobile 5.0-based devices." target="_blank"><font color="#56b6e9" size="3">Windows Mobile 5.0 Developer Resource Kit</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=27fc4663-8661-4760-9993-cde5d27d5fc9&amp;DisplayLang=en" title="MEDC is the leading event for developers, engineers, and business managers. here are presentations from the event about the latest windows embedded and windows mobile&#174; platforms." target="_blank"><font color="#56b6e9" size="3">Microsoft Mobile &amp; Embedded DevCon 2006 DVD</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=08e4391d-e07d-41fe-b2b8-aa4225281347&amp;DisplayLang=en" title="Windows mobility webcasts offers you a full range of pre-recorded instructor-led webcasts covering window mobile development topics and technologies like windows mobile 5.0 pocket pc/smartphone , microsoft visual studio 2005, the .net compact framework 2.0 and sql server mobile. you will be able to view these videos on your own time and without requiring a high-bandwidth data connection for streaming live-webcasts." target="_blank"><font color="#56b6e9" size="3">Windows Mobility Marvels</font></a><br><a  href="http://www.microsoft.com/downloads/details.aspx?FamilyID=80a5c2c5-4f9b-4c1a-bff6-2a3c6b68d15b&amp;DisplayLang=en" title="This resource helps c# developers understand the components involved in creating windows mobile solutions by providing a sample line of business application along with commented source code for a c# visual studio 2005 windows mobile 5.0 project." target="_blank"><font color="#56b6e9" size="3">'Mobile Line of Business Solution Accelerator' kit</font></a><br><br>转自：http://www.2guys.cn/collection/17461619481619.html<strong><font color="#ffffff">Win CE)开发工具下载</font></strong><img src ="http://www.cppblog.com/Lee7/aggbug/90018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-07-14 14:13 <a href="http://www.cppblog.com/Lee7/archive/2009/07/14/90018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML文件格式语法及DTD </title><link>http://www.cppblog.com/Lee7/archive/2009/06/28/88691.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Sun, 28 Jun 2009 06:02:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/06/28/88691.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/88691.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/06/28/88691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/88691.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/88691.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: XML文件格式语法及DTD&nbsp;XML文件和HTML文件一样，实际上是一个文本文件。显然大家立刻就会明白，创建XML文件最普通的工具和HTML一样，就是&#8220;记事本&#8221;了。除了&nbsp;&#8220;记事本&#8221;之外，当然还有一些更加方便的工具，如XML&nbsp;Notepad、XML&nbsp;Pro、CLIP！XML&nbsp;Editor等，这些工具的...&nbsp;&nbsp;<a href='http://www.cppblog.com/Lee7/archive/2009/06/28/88691.html'>阅读全文</a><img src ="http://www.cppblog.com/Lee7/aggbug/88691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-06-28 14:02 <a href="http://www.cppblog.com/Lee7/archive/2009/06/28/88691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模态对话框和非模态对话框的区别 </title><link>http://www.cppblog.com/Lee7/archive/2009/06/23/88356.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Tue, 23 Jun 2009 05:49:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/06/23/88356.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/88356.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/06/23/88356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/88356.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/88356.html</trackback:ping><description><![CDATA[<span id=team0>模态对话框就是指那种&#8220;显示出来就不可以点选位于其下面的对话框&#8221;的对话框；反之的就是非模态对话框。<br>两者的区别：<br>一.&nbsp;非模态对话框的模板必须具有Visible风格(Visible=True)，否则对话框将不可见，而模态对话框则无需设置该项风格。在实际编程中更加保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框，而不管对话框是否具有Visible风格。<br>二.&nbsp;非模态对话框对象是用new操作符来动态创建的，而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建的。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量，通过该指针可访问对话框对象。<br>三.&nbsp;通过调用CDialog::Create函数来启动对话框，而不是CDialog::DoModal，这是两者之间区别的关键所在。由于Create函数不会启动新的消息循环，对话框与应用程序共用同一个消息循环，这样对话框就不会垄断用户输入。Create在显示了对话框后就立即返回，而DoModal是在对话框被关闭后才返回的。由于在Create返回后，不能确定对话框是否已关闭，这样也就无法确定对话框对象的生存期，因此只好在堆栈中构建对话框对象，而不能以局部变量的形式来构建之。<br>四.&nbsp;必须调用CWnd::DestroyWindow而不是CDialog::EndDialog来关闭非模态对话框。调用CWnd::DestroyWindow是直接删除窗口的一般方法。由于缺省的CDialog::OnOK和CDialog::OnCancel函数均调用EndDialog，故程序员必须编写自己的OnOK和OnCancel函数并且在函数中调用DestroyWindow来关闭对话框。<br>五.&nbsp;因为是用new操作符构建非模态对话框对象，因此必须在对话框关闭后，用delete操作符删除对话框对象。在屏幕上一个窗口被删除后，框架会调用CWnd::PostNcDestroy，这是一个虚拟函数，程序可以在该函数中完成删除窗口对象的工作，具体代码如下<br>void&nbsp;CModelessDialog::PostNcDestroy<br>{delete&nbsp;this;&nbsp;&nbsp;&nbsp;&nbsp;//删除对象}<br>这样，在删除屏幕上的对话框后，对话框对象将被自动删除。拥有者就不必显式地调用delete来删除对话框对象了。<br>六.&nbsp;必须有一个标志表明非模态对话框是否打开的。这样做的原因是用户有可能在打开一个模态对话框的情况下，又一次选择打开命令。程序根据标志来决定是打开一个新的对话框，还是仅仅把原来打开的对话框激活。通常可以用拥有者窗口中的指向对话框对象的指针作为这种标志，当对话框关闭时，给该指针赋NULL值，以表明对话框对象已不存在了。<br>例如：<br>创建模态对话框<br>CTestDlg&nbsp;dlg;<br>dlg.DoModal();<br>创建非模态对话框<br>CTestDlg&nbsp;*&nbsp;dlg&nbsp;=&nbsp;new&nbsp;CTestDlg;<br>dlg-&gt;Create(IDD_TEST_DLG);<br>dlg-&gt;ShowWindow(SW_SHOW);
<p>&#160;</p>
<p></span></p>
<img src ="http://www.cppblog.com/Lee7/aggbug/88356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-06-23 13:49 <a href="http://www.cppblog.com/Lee7/archive/2009/06/23/88356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML字符串的读写操作函数及示例程序[转]</title><link>http://www.cppblog.com/Lee7/archive/2009/06/22/88306.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Mon, 22 Jun 2009 10:01:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2009/06/22/88306.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/88306.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2009/06/22/88306.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/88306.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/88306.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;OpXML.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;for&nbsp;the&nbsp;console&nbsp;application.<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">-----------------------&nbsp;Coded&nbsp;By&nbsp;Ronk&nbsp;--------------------------</span><span style="color: #008000;">//</span><span style="color: #008000;"><br></span><span style="color: #008000;">//</span><span style="color: #008000;">-----------------------&nbsp;2005-07-17&nbsp;--------------------------</span><span style="color: #008000;">//<br></span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">stdafx.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>#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><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">---You&nbsp;must&nbsp;Setup&nbsp;the&nbsp;MSXML4.0&nbsp;before&nbsp;using</span><span style="color: #008000;"><br></span><span style="color: #000000;">#import&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">msxml4.dll</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;MSXML2;<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;xmlread(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ch1,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ch2,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ch3);</span><span style="color: #008000;">//</span><span style="color: #008000;">Read&nbsp;the&nbsp;xmlstr&nbsp;and&nbsp;Get&nbsp;the&nbsp;Text&nbsp;of&nbsp;the&nbsp;Element</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;xmlupdate(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ch1,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ch2,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ch3);</span><span style="color: #008000;">//</span><span style="color: #008000;">Read&nbsp;the&nbsp;xmlstr&nbsp;and&nbsp;Update&nbsp;the&nbsp;Text&nbsp;of&nbsp;the&nbsp;Element</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;xmlstr[</span><span style="color: #000000;">1024</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;inesmsg&gt;&lt;msghead&gt;&lt;version&gt;LZD&lt;/version&gt;&lt;root&gt;ioio&lt;/root&gt;&lt;/msghead&gt;&lt;/inesmsg&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;strele[</span><span style="color: #000000;">1024</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">//version//</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;textstr[</span><span style="color: #000000;">1024</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">NNYX</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;value[</span><span style="color: #000000;">1024</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;xmlstr&nbsp;is&nbsp;:\n%s\n\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,xmlstr);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;xmlread(xmlstr,strele,value);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">befor&nbsp;Update</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;Text&nbsp;of&nbsp;Element&nbsp;befor&nbsp;Update&nbsp;is:&nbsp;\n%s\n\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,value);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;xmlupdate(xmlstr,strele,textstr);</span><span style="color: #008000;">//</span><span style="color: #008000;">Change&nbsp;the&nbsp;Text&nbsp;of&nbsp;"&lt;version&gt;"&nbsp;with&nbsp;"NNYX"</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;Updated&nbsp;xmlstr&nbsp;is&nbsp;:\n%s\n\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,xmlstr);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;xmlread(xmlstr,strele,value);</span><span style="color: #008000;">//</span><span style="color: #008000;">after&nbsp;Update</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;Text&nbsp;of&nbsp;Element&nbsp;after&nbsp;Update&nbsp;is&nbsp;:\n%s\n\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,value);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;xmlread(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;msgstr,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;elestr,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">tex)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Initialize</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;CoInitialize(NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;IXMLDOMDocumentPtr&nbsp;pXmlDoc;<br>&nbsp;&nbsp;&nbsp;&nbsp;IXMLDOMNodePtr&nbsp;pXmlNode;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;hr;<br>&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pXmlDoc.CreateInstance(__uuidof(DOMDocument));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(FAILED(hr))<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Faild&nbsp;to&nbsp;Create&nbsp;XMLDom&nbsp;Instance&nbsp;!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlDoc</span><span style="color: #000000;">=</span><span style="color: #000000;">NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlDoc&nbsp;</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">async&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;VARIANT_FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Load&nbsp;xmlmsg</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_bstr_t&nbsp;xmlstr</span><span style="color: #000000;">=</span><span style="color: #000000;">(LPCSTR)msgstr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">(pXmlDoc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">loadXML(msgstr)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Failed&nbsp;to&nbsp;Load&nbsp;xmlstr:\n%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,(LPCSTR)pXmlDoc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">parseError</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Getreason());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlDoc</span><span style="color: #000000;">=</span><span style="color: #000000;">NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Locate&nbsp;the&nbsp;Element</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_bstr_t&nbsp;str</span><span style="color: #000000;">=</span><span style="color: #000000;">(LPCSTR)elestr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlNode&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pXmlDoc&nbsp;</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">selectSingleNode(elestr);<br>&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(FAILED(pXmlNode))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Faild&nbsp;to&nbsp;Locate&nbsp;the&nbsp;Element&nbsp;\n%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Read&nbsp;the&nbsp;Text&nbsp;of&nbsp;Element</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(tex,(LPCSTR)pXmlNode&nbsp;</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">text);<br>&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;</span><span style="color: #008000;">//</span><span style="color: #008000;">Realese</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlDoc.Release();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlNode.Release();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;xmlupdate(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">msgstr,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">elestr,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">upstr)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">---Initialize</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;CoInitialize(NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;IXMLDOMDocumentPtr&nbsp;pXmlDoc;<br>&nbsp;&nbsp;&nbsp;&nbsp;IXMLDOMNodePtr&nbsp;pXmlNode;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;hr;<br>&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pXmlDoc.CreateInstance(__uuidof(DOMDocument));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(FAILED(hr))<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Faild&nbsp;to&nbsp;Create&nbsp;XMLDom&nbsp;Instance&nbsp;!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlDoc</span><span style="color: #000000;">=</span><span style="color: #000000;">NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlDoc&nbsp;</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">async&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;VARIANT_FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Load&nbsp;xml&nbsp;str</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_bstr_t&nbsp;xmlstr</span><span style="color: #000000;">=</span><span style="color: #000000;">(LPCSTR)msgstr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">(pXmlDoc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">loadXML(msgstr)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Failed&nbsp;to&nbsp;load&nbsp;xmlstr:\n%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,(LPCSTR)pXmlDoc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">parseError</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Getreason());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlDoc</span><span style="color: #000000;">=</span><span style="color: #000000;">NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Located&nbsp;the&nbsp;Element</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_bstr_t&nbsp;str</span><span style="color: #000000;">=</span><span style="color: #000000;">(LPCSTR)elestr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlNode&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pXmlDoc&nbsp;</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">selectSingleNode(elestr);<br>&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(FAILED(pXmlNode))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Failed&nbsp;to&nbsp;Locate&nbsp;the&nbsp;Element&nbsp;\n%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Update&nbsp;the&nbsp;Text&nbsp;of&nbsp;the&nbsp;Element</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlNode</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;upstr;<br>&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;</span><span style="color: #008000;">//</span><span style="color: #008000;">Get&nbsp;the&nbsp;New&nbsp;xmlstr</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(msgstr,(LPCSTR)pXmlDoc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">xml);<br>&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;</span><span style="color: #008000;">//</span><span style="color: #008000;">Realese</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlDoc.Release();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pXmlNode.Release();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br><img src ="http://www.cppblog.com/Lee7/aggbug/88306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2009-06-22 18:01 <a href="http://www.cppblog.com/Lee7/archive/2009/06/22/88306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>