﻿<?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++博客-xgzpan-随笔分类-编程中的贝壳</title><link>http://www.cppblog.com/xgzpan/category/2571.html</link><description>一步一个脚印</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 23:00:02 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 23:00:02 GMT</pubDate><ttl>60</ttl><item><title>vc6.0的内在泄露提示搞死我了</title><link>http://www.cppblog.com/xgzpan/archive/2008/05/10/49375.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Fri, 09 May 2008 16:24:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2008/05/10/49375.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/49375.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2008/05/10/49375.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/49375.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/49375.html</trackback:ping><description><![CDATA[<span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 自己接触的项目基本都是用vc2003写的.这几天因为贪图vc6.0写的dll小(不必静态连接嘛).所以用上了这个"老家伙".而以前的程序都不是UNICODE字符集的,考虑到国际化,所以这个DLL就用UNICODE字符集了.</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; dll的接口定义好后,又写了几个类.然后用MFC对话框程序来测试这个dll.可要命的是,vc6老是提示有内在泄露.如下:</span><br style="color: #a00000;"><span style="color: #a00000;">Detected memory leaks!</span><br style="color: #a00000;"><span style="color: #a00000;">Dumping objects -&gt;</span><br style="color: #a00000;"><span style="color: #a00000;">{51} normal block at 0x003B2E80, 33 bytes long.</span><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;Data: &lt; C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD </span><br style="color: #a00000;"><span style="color: #a00000;">{50} normal block at 0x003B2E18, 40 bytes long.</span><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;Data: &lt; |L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00 </span><br style="color: #a00000;"><span style="color: #a00000;">Object dump complete.</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 我检查了所有该释放内存的地方都释放了.还是提示内在泄露...我动用了内存泄露检查工具(AQTime5),却没找到有内存泄露的地方...是怎么回事呢?</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 最后,我只是在测试工程里加上dll导出来的api,而没有调用.还是提示有内在泄露...怎么回事?我确认,如果dll导出的api没有被调用,dll里就绝对不会有对象被实例化!</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 可是,这样怎么还是说有内在泄露?我要抓狂了:(....</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 没法,还是要找到问题出在哪里啊.我就把dll的类一个一个注释掉,把dll中的文件从工程中一个一个移除掉...把一个类里的一个变量或一个成员函数注释掉...终于发现是在一个线程类里有这样一个成员变量:wstring m_strThreadName,只要注视掉它,就不会有内在泄露的提示,只要加上就有.</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 真晕,这个线程类都还没有被实例化呢.为了验证是vc6生成长歪了,我用它写了一个很简单的dll,只导出一个add的api,这个api做了一个1+1的运算,然后返回. 测试后,没问题.我又增加了一个类,并加上了一个成员变量: wstring m_name,不实例化它. 再次测试果然提示有内存泄露,和前一个dll的提示一模一样!! 我晕菜后醒来,真想拿头撞墙,最后考虑再三,只是一口气做了N个俯卧撑(N&lt;=5,发现右手经常握鼠标,经年累月后,在手腕和手掌关节处的骨头长长了,成不了90度了.做俯卧撑时疼痛难忍,看样子,要经常锻炼身体才对)</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 用vc2003或以上的版本测试,没有这个内存泄露的提示.</span><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 哎,应该彻底的把vc6仍到厕所里了(对模板支持太差,可也怪不了人家,它出生太早).说不定又会莫名其妙的闹鬼....</span><br style="color: #a00000;"><img src ="http://www.cppblog.com/xgzpan/aggbug/49375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2008-05-10 00:24 <a href="http://www.cppblog.com/xgzpan/archive/2008/05/10/49375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个COM对象明明支持一个接口，创建时却返回E_NOINTERFACE的问题</title><link>http://www.cppblog.com/xgzpan/archive/2008/04/29/48405.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Tue, 29 Apr 2008 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2008/04/29/48405.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/48405.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2008/04/29/48405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/48405.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/48405.html</trackback:ping><description><![CDATA[<span style="color: #700000;">&nbsp;&nbsp;&nbsp; 昨天晚上写COM组件时突然碰到创建一个COM对象时，返回0x80040154,没有注册类型...搞得一头雾水.检查了创建函数，参数，GUID,注册表中的各项都正常....</span><br style="color: #700000;"><span style="color: #700000;">&nbsp;&nbsp;&nbsp; 最后没辙了，只能新建一个COM工程试试，结果也是一样的（在同一个工程中测试）.后来又新建了一个测试工程，也重新编译COM工程，结果却返回E_NOINTERFACE，晕啊.创建的对象明明支持这个接口的啊.我追踪到ATL的代码里，发现我查询的接口确实找到了，但最后还是返回E_NOINTERFACE. 经过几次调试，发现老是查询IMarshaling等几个与列集有关的接口,f却总找不到....后来在网上找到了一篇文章，找明白了一些.</span><br style="color: #700000;"><span style="color: #700000;">　参考：http://blogs.msdn.com/oldnewthing/archive/2004/12/13/281910.aspx</span><br style="color: #700000;"><span style="color: #700000;">&nbsp;&nbsp;&nbsp; </span><br style="color: #700000;">
<h2 style="color: #700000;">Why do I get E_NOINTERFACE when creating an object that supports that interface?</h2>
<p style="color: #700000;">
I've seen a few questions from people who call
<a href="http://msdn.microsoft.com/library/en-us/com/htm/cmf_a2c_1nad.asp">
the <code>CoCreateInstance</code> function</a>,
asking for an interface that they know the object supports,
yet receiving error <code>E_NOINTERFACE</code>.
What's going on?
</p>
<p style="color: #700000;">
You're seeing
<a href="http://blogs.msdn.com/oldnewthing/archive/2004/02/20/77120.aspx">
the same problem as the missing IMarshal</a>,
just from the other side.
</p>
<p style="color: #700000;">
If your threading model is incompatible with the threading model
of the object you're creating, then COM marshalling kicks in.
And if the marshalling stuff isn't there, the error that comes
out is <code>E_NOINTERFACE</code>, because the marshalling interface
is missing.
</p>
<p style="color: #700000;">
A common source of this is attempting to use COM objects provided
by the shell from a multi-threaded apartment.  Remember that shell
COM objects are, for the most part, apartment-threaded, not
free-threaded.
If you want to use shell objects, you should do so from single-threaded
apartments.
</p>
<span style="color: #700000;">
Published
Monday, December 13, 2004 8:51 AM
by
</span><a style="color: #700000;" href="http://blogs.msdn.com/user/Profile.aspx?UserID=2905" id="ctl00___ctl00___ctl01___Entry___AuthorLink">oldnewthing</a><span style="color: #700000;">
</span><span style="color: #700000;" id="ctl00___ctl00___ctl01___Entry___InlineTagEditorPanel">Filed under: <a href="http://blogs.msdn.com/oldnewthing/archive/tags/Code/default.aspx" rel="tag">Code</a><br><br><br>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br><br>&nbsp;&nbsp;&nbsp; 后来我看了下我的测试工程是/MDd,而COM工程的线程模型是Free，改成Apartment就好了.解释如上.但我愚钝，还是一知半解，五一好好钻研下这两个问题：<br><br>&nbsp;&nbsp;&nbsp; １.没有注册类型<br><br>&nbsp;&nbsp;&nbsp; ２.E_NOINTERFACE</span><span style="font-size: 36pt; color: #700000;"><span style="font-size: 24pt;"><span style="font-size: 14pt;"><span style="font-size: 12px;"></span></span><span style="font-size: 12px;"></span></span><span style="font-size: 12px;"></span></span><span style="font-size: 12px; color: #700000;"></span><span style="text-decoration: underline; color: #700000;"></span> <img src ="http://www.cppblog.com/xgzpan/aggbug/48405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2008-04-29 11:35 <a href="http://www.cppblog.com/xgzpan/archive/2008/04/29/48405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据结构或句柄什么的，一定要初始化！！</title><link>http://www.cppblog.com/xgzpan/archive/2006/09/03/11984.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Sat, 02 Sep 2006 16:19:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2006/09/03/11984.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/11984.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2006/09/03/11984.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/11984.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/11984.html</trackback:ping><description><![CDATA[　　最近在写一个网络诊断的小程序，由于粗心大意或说自己的初始化意识不够强，造成了被主管"鄙视"的事态，哈哈。笑完后，告诉自己，以后碰到使用数据结构的地方，就当是碰到指针一样，不管三七二十一，初始化先。<br /><br />　　在Debug下不初始化数据结构或句柄啥的没关系，因为Debug下，VC替你做了。但在Release下就会出现不确定的行为。有时可以，时不可以....<br /><br />       比如在CListCtrl中改变图标的一段代码:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> CPSDiagDlg::ChangeImage(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> nItem,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> nImg)<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_49_220_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_220_Open_Text.style.display='none'; Codehighlighter1_49_220_Closed_Image.style.display='inline'; Codehighlighter1_49_220_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_49_220_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_49_220_Closed_Text.style.display='none'; Codehighlighter1_49_220_Open_Image.style.display='inline'; Codehighlighter1_49_220_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_49_220_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_49_220_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    LVITEM item;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">memset(&amp;item,0,sizeof(LVITEM));</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    item.iItem </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> nItem;<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    m_list.GetItem(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">item);<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    item.mask </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> LVIF_IMAGE;<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    item.iImage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> nImg;<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    m_list.SetItem(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">item);<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />　　这段代码在Debug下运行得很好，但在Release却没什么影响，偶尔能改变图标(换图标)。如果把注释掉的5行放开，一切ok.<br /><br />　　还有一段发送UDP数据包的代码:<br />　　创建sock:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">BOOL CPSSvrTester::CreateSocket(WORD wPort)<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_44_1219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_44_1219_Open_Text.style.display='none'; Codehighlighter1_44_1219_Closed_Image.style.display='inline'; Codehighlighter1_44_1219_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_44_1219_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_44_1219_Closed_Text.style.display='none'; Codehighlighter1_44_1219_Open_Image.style.display='inline'; Codehighlighter1_44_1219_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_44_1219_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_44_1219_Open_Text"><span style="COLOR: #000000">{    <br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (m_socket </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> INVALID_SOCKET </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> m_wPort </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> wPort)<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_101_159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_101_159_Open_Text.style.display='none'; Codehighlighter1_101_159_Closed_Image.style.display='inline'; Codehighlighter1_101_159_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_101_159_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_101_159_Closed_Text.style.display='none'; Codehighlighter1_101_159_Open_Image.style.display='inline'; Codehighlighter1_101_159_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_101_159_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_101_159_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        closesocket(m_socket);<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        m_socket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> INVALID_SOCKET;<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_socket </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> INVALID_SOCKET)<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img id="Codehighlighter1_194_1203_Open_Image" onclick="this.style.display='none'; Codehighlighter1_194_1203_Open_Text.style.display='none'; Codehighlighter1_194_1203_Closed_Image.style.display='inline'; Codehighlighter1_194_1203_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_194_1203_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_194_1203_Closed_Text.style.display='none'; Codehighlighter1_194_1203_Open_Image.style.display='inline'; Codehighlighter1_194_1203_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_194_1203_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_194_1203_Open_Text"><span style="COLOR: #000000">{    <br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        sockaddr_in    local;    <br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">wPort = 6002;</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(wPort)<br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            m_wPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> wPort;<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        local.sin_family</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">AF_INET;<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        local.sin_addr.s_addr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        local.sin_port</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">htons(m_wPort);<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        WORD wTmpPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> wPort;<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> iTimes </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        m_socket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> socket(AF_INET, SOCK_DGRAM, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);        <br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(bind(m_socket,(sockaddr </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">local,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(sockaddr_in)) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> SOCKET_ERROR)<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img id="Codehighlighter1_536_738_Open_Image" onclick="this.style.display='none'; Codehighlighter1_536_738_Open_Text.style.display='none'; Codehighlighter1_536_738_Closed_Image.style.display='inline'; Codehighlighter1_536_738_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_536_738_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_536_738_Closed_Text.style.display='none'; Codehighlighter1_536_738_Open_Image.style.display='inline'; Codehighlighter1_536_738_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_536_738_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_536_738_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            closesocket(m_socket);<br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            iTimes</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(iTimes</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">m_socket = INVALID_SOCKET;</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(wPort)<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                local.sin_port </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> htons(</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">wTmpPort);<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            m_socket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> socket(AF_INET, SOCK_DGRAM, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(iTimes</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img id="Codehighlighter1_759_993_Open_Image" onclick="this.style.display='none'; Codehighlighter1_759_993_Open_Text.style.display='none'; Codehighlighter1_759_993_Closed_Image.style.display='inline'; Codehighlighter1_759_993_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_759_993_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_759_993_Closed_Text.style.display='none'; Codehighlighter1_759_993_Open_Image.style.display='inline'; Codehighlighter1_759_993_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_759_993_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_759_993_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> inamelen </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(local);<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockname(m_socket,(SOCKADDR </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">local,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">inamelen ) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> SOCKET_ERROR)<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img id="Codehighlighter1_872_953_Open_Image" onclick="this.style.display='none'; Codehighlighter1_872_953_Open_Text.style.display='none'; Codehighlighter1_872_953_Closed_Image.style.display='inline'; Codehighlighter1_872_953_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_872_953_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_872_953_Closed_Text.style.display='none'; Codehighlighter1_872_953_Open_Image.style.display='inline'; Codehighlighter1_872_953_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span id="Codehighlighter1_872_953_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_872_953_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                closesocket(m_socket);<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                m_socket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> INVALID_SOCKET;<br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            m_wPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ntohs(local.sin_port);<br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img id="Codehighlighter1_1004_1081_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1004_1081_Open_Text.style.display='none'; Codehighlighter1_1004_1081_Closed_Image.style.display='inline'; Codehighlighter1_1004_1081_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1004_1081_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1004_1081_Closed_Text.style.display='none'; Codehighlighter1_1004_1081_Open_Image.style.display='inline'; Codehighlighter1_1004_1081_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1004_1081_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_1004_1081_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            closesocket(m_socket);<br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            m_socket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> INVALID_SOCKET;<br /></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> TimeOut</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2000</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        setsockopt (m_socket, SOL_SOCKET,SO_RCVTIMEO,(CHAR </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">TimeOut,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000"> (TimeOut));<br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> TRUE;<br /></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> TRUE;<br /></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />发送UDP数据包的代码：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">BOOL CPSSvrTester::Send(BYTE </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pData, DWORD dwDataLen, DWORD dwSendTo, WORD wPort)<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_82_435_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_435_Open_Text.style.display='none'; Codehighlighter1_82_435_Closed_Image.style.display='inline'; Codehighlighter1_82_435_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_82_435_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_435_Closed_Text.style.display='none'; Codehighlighter1_82_435_Open_Image.style.display='inline'; Codehighlighter1_82_435_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_82_435_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_82_435_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (m_socket </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> INVALID_SOCKET)<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_118_137_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_137_Open_Text.style.display='none'; Codehighlighter1_118_137_Closed_Image.style.display='inline'; Codehighlighter1_118_137_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_118_137_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_118_137_Closed_Text.style.display='none'; Codehighlighter1_118_137_Open_Image.style.display='inline'; Codehighlighter1_118_137_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_118_137_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_118_137_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    SOCKADDR_IN        remote;    <br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">                iRet;            <br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    remote.sin_family </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> AF_INET;<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    remote.sin_port </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> htons(wPort);<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    remote.sin_addr.s_addr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> dwSendTo;    <br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    iRet </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sendto(m_socket,(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)pData,dwDataLen,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,(SOCKADDR </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">remote,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(remote));<br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(iRet</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> TRUE;<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />　　在Debug下先调用CreateSocket,然后调用Send发送数据，每次都ok.因为Debug，vc已把m_sock初始化为INVALID＿SOCKET。而在Release下就完罗，怎么也发不了数据，因为CreateSocket里的代码根本没执行！<br /><br />　　在构造函数中添加:m_sock = INVALID_SOCKET；一切ok!<img src ="http://www.cppblog.com/xgzpan/aggbug/11984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2006-09-03 00:19 <a href="http://www.cppblog.com/xgzpan/archive/2006/09/03/11984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>