﻿<?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++博客-mooyee's blog-随笔分类-网络编程, ACE</title><link>http://www.cppblog.com/mooyee/category/1120.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 12:17:41 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 12:17:41 GMT</pubDate><ttl>60</ttl><item><title>ACE链接失败一例</title><link>http://www.cppblog.com/mooyee/archive/2006/03/29/4708.html</link><dc:creator>stone</dc:creator><author>stone</author><pubDate>Wed, 29 Mar 2006 01:49:00 GMT</pubDate><guid>http://www.cppblog.com/mooyee/archive/2006/03/29/4708.html</guid><wfw:comment>http://www.cppblog.com/mooyee/comments/4708.html</wfw:comment><comments>http://www.cppblog.com/mooyee/archive/2006/03/29/4708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mooyee/comments/commentRss/4708.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mooyee/services/trackbacks/4708.html</trackback:ping><description><![CDATA[有网友问到,他在链接的时候,产生一堆错误<br /><br />我们还是先看他的代码吧.<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> acetest2.cpp : Defines the entry point for the console application.<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> client.cpp</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace/OS_main.h</span><span style="COLOR: #000000">"</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/None.gif" align="top" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace/OS_NS_string.h</span><span style="COLOR: #000000">"</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/None.gif" align="top" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace/OS_NS_sys_socket.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace/OS_NS_unistd.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace/OS_NS_stdlib.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace/OS_NS_stdio.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace/OS_NS_netdb.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace/Default_Constants.h</span><span style="COLOR: #000000">"</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/None.gif" align="top" /><br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />ACE_RCSID(SOCK_SAP, client, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">client.cpp,v 4.10 2005/01/21 02:19:20 ossama Exp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img id="Codehighlighter1_414_436_Open_Image" onclick="this.style.display='none'; Codehighlighter1_414_436_Open_Text.style.display='none'; Codehighlighter1_414_436_Closed_Image.style.display='inline'; Codehighlighter1_414_436_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_414_436_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_414_436_Closed_Text.style.display='none'; Codehighlighter1_414_436_Open_Image.style.display='inline'; Codehighlighter1_414_436_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_414_436_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_414_436_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> BSD socket client </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />ACE_TMAIN (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, ACE_TCHAR </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id="Codehighlighter1_483_2830_Open_Image" onclick="this.style.display='none'; Codehighlighter1_483_2830_Open_Text.style.display='none'; Codehighlighter1_483_2830_Closed_Image.style.display='inline'; Codehighlighter1_483_2830_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_483_2830_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_483_2830_Closed_Text.style.display='none'; Codehighlighter1_483_2830_Open_Image.style.display='inline'; Codehighlighter1_483_2830_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_483_2830_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_483_2830_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">22</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"> Initialize WinSock DLL on Win32<img src="http://www.cppblog.com/images/dot.gif" /></span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">  ACE_OS::socket_init (ACE_WSOCK_VERSION);<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> sockaddr_in saddr;<br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> hostent </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">hp;<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">const</span><span style="COLOR: #000000"> ACE_TCHAR </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">host </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> argc </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> argv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">] : ACE_DEFAULT_SERVER_HOST;<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  u_short port_num </span><span style="COLOR: #000000">=</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" />    htons (argc </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> ACE_OS::atoi (argv[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]) : ACE_DEFAULT_SERVER_PORT);<br /></span><span style="COLOR: #008080">30</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"> sockbufsize </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> argc </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> ACE_OS::atoi (argv[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]) : </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> buf[BUFSIZ];<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  ACE_HANDLE s_handle;<br /></span><span style="COLOR: #008080">33</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"> w_bytes;<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">int</span><span style="COLOR: #000000"> r_bytes;<br /></span><span style="COLOR: #008080">35</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"> n;<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><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: #008000">//</span><span style="COLOR: #008000"> Create a local endpoint of communication.</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">38</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"> ((s_handle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ACE_OS::socket (PF_INET, SOCK_STREAM, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> ACE_INVALID_HANDLE)<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ACE_OS::perror (ACE_TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">socket</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)), ACE_OS::exit (</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><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: #008000">//</span><span style="COLOR: #008000"> If a sockbufsize was specified, set it for both send and receive.</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">42</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"> (sockbufsize </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img id="Codehighlighter1_1213_1605_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1213_1605_Open_Text.style.display='none'; Codehighlighter1_1213_1605_Closed_Image.style.display='inline'; Codehighlighter1_1213_1605_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1213_1605_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1213_1605_Closed_Text.style.display='none'; Codehighlighter1_1213_1605_Open_Image.style.display='inline'; Codehighlighter1_1213_1605_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span id="Codehighlighter1_1213_1605_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_1213_1605_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">44</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"> (ACE_OS::setsockopt (s_handle, SOL_SOCKET, SO_SNDBUF,<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">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">sockbufsize,<br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000"> (sockbufsize)) </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">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      ACE_OS::perror (ACE_TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_SNDBUF</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)), ACE_OS::exit (</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">48</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"> (ACE_OS::setsockopt (s_handle, SOL_SOCKET, SO_RCVBUF,<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">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">sockbufsize,<br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000"> (sockbufsize)) </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">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      ACE_OS::perror (ACE_TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_RCVBUF</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)), ACE_OS::exit (</span><span style="COLOR: #000000">1</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/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">54</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"> Determine IP address of the server.</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">55</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"> ((hp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ACE_OS::gethostbyname (ACE_TEXT_ALWAYS_CHAR(host))) </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">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ACE_OS::perror (ACE_TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">gethostbyname</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)), ACE_OS::exit (</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">58</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"> Set up the address information to contact the server.</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">59</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">  ACE_OS::memset ((</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">saddr, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000"> saddr);<br /></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  saddr.sin_family </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> AF_INET;<br /></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  saddr.sin_port </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> port_num;<br /></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  ACE_OS::memcpy (</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">saddr.sin_addr, hp</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_addr, hp</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_length);<br /></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">64</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"> Establish connection with remote server.</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">65</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"> (ACE_OS::connect (s_handle,<br /></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    reinterpret_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">sockaddr </span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">saddr),<br /></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000"> saddr) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ACE_OS::perror (ACE_TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">connect</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)), ACE_OS::exit (</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">70</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"> Send data to server (correctly handles "incomplete writes" due to<br /></span><span style="COLOR: #008080">71</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> flow control).</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">72</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">73</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"> ((r_bytes </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ACE_OS::read (ACE_STDIN, buf, </span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000"> buf)) </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (w_bytes </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; w_bytes </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> r_bytes; w_bytes </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> n)<br /></span><span style="COLOR: #008080">75</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"> ((n </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ACE_OS::send (s_handle, buf </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> w_bytes,<br /></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        r_bytes </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> w_bytes)) </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        ACE_OS::perror (ACE_TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">write</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)), ACE_OS::exit (</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">79</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"> (ACE_OS::recv (s_handle, buf, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">80</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ACE_OS::write (ACE_STDOUT, buf, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">81</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">82</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"> Explicitly close the connection.</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">83</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"> (ACE_OS::closesocket (s_handle) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">84</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ACE_OS::perror (ACE_TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">close</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)), ACE_OS::exit (</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">85</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"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">86</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">87</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">88</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">89</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br />直接编译,产生如下错误<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">------</span><span style="COLOR: #000000"> Build started: Project: acetest2, Configuration: Debug Win32 </span><span style="COLOR: #000000">------</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />Compiling<img src="http://www.cppblog.com/images/dot.gif" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.cpp<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />Linking<img src="http://www.cppblog.com/images/dot.gif" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ace_os_main_i(class ACE_Main_Base &amp;,int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_os_main_i@@YAHAAVACE_Main_Base@@HQAPAD@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function _main<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) public: __thiscall ACE_Main_Base::ACE_Main_Base(void)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">??</span><span style="COLOR: #000000">0ACE_Main_Base@@QAE@XZ) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">public: __thiscall ACE_Main::ACE_Main(void)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">??</span><span style="COLOR: #000000">0ACE_Main@@QAE@XZ)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::closesocket(void *)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">closesocket@ACE_OS@@YAHPAX@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::write(void *,void const *,unsigned int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">write@ACE_OS@@YAHPAXPBXI@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::recv(void *,char *,unsigned int,int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">recv@ACE_OS@@YAHPAXPADIH@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::send(void *,char const *,unsigned int,int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">send@ACE_OS@@YAHPAXPBDIH@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::read(void *,void *,unsigned int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">read@ACE_OS@@YAHPAX0I@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::connect(void *,struct sockaddr *,int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">connect@ACE_OS@@YAHPAXPAUsockaddr@@H@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) void * __cdecl ACE_OS::memcpy(void *,void const *,unsigned int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">memcpy@ACE_OS@@YAPAXPAXPBXI@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) void * __cdecl ACE_OS::memset(void *,int,unsigned int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">memset@ACE_OS@@YAPAXPAXHI@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) struct hostent * __cdecl ACE_OS::gethostbyname(char const *)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">gethostbyname@ACE_OS@@YAPAUhostent@@PBD@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::setsockopt(void *,int,int,char const *,int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">setsockopt@ACE_OS@@YAHPAXHHPBDH@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) void __cdecl ACE_OS::exit(int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">exit@ACE_OS@@YAXH@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) void __cdecl ACE_OS::perror(char const *)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">perror@ACE_OS@@YAXPBD@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) void * __cdecl ACE_OS::socket(int,int,int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">socket@ACE_OS@@YAPAXHHH@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::atoi(char const *)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">atoi@ACE_OS@@YAHPBD@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />acetest2.obj : error LNK2019: unresolved external symbol </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__declspec(dllimport) int __cdecl ACE_OS::socket_init(int,int)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (__imp_</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">socket_init@ACE_OS@@YAHHH@Z) referenced </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> function </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int __cdecl ace_main_i(int,char * * const)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">ace_main_i@@YAHHQAPAD@Z)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />Debug</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">acetest2.exe : fatal error LNK1120: </span><span style="COLOR: #000000">17</span><span style="COLOR: #000000"> unresolved externals</span></div><br />解决方法,是正确的链接ace(x).lib<br />其中, release版对应的是ace.lib,debug对应的是aced.lib<br />同时，还要确保编辑器能正确找到ace(x).lib的位置．<br /><br />简单的办法是加入下面的代码<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">#ifdef _DEBUG<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#pragma  comment (lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">aced.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#else</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#pragma  comment (lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ace.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><p><br /> </p><img src ="http://www.cppblog.com/mooyee/aggbug/4708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mooyee/" target="_blank">stone</a> 2006-03-29 09:49 <a href="http://www.cppblog.com/mooyee/archive/2006/03/29/4708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACE_Message_Block小知识</title><link>http://www.cppblog.com/mooyee/archive/2006/03/15/4197.html</link><dc:creator>stone</dc:creator><author>stone</author><pubDate>Wed, 15 Mar 2006 05:53:00 GMT</pubDate><guid>http://www.cppblog.com/mooyee/archive/2006/03/15/4197.html</guid><wfw:comment>http://www.cppblog.com/mooyee/comments/4197.html</wfw:comment><comments>http://www.cppblog.com/mooyee/archive/2006/03/15/4197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mooyee/comments/commentRss/4197.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mooyee/services/trackbacks/4197.html</trackback:ping><description><![CDATA[<TABLE class="fixedTable blogpost" cellSpacing=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=ellipse><SPAN class=bvTitle id=subjcns!A4A8B7175059E42A!273><STRONG>ACE_Message_Block小知识</STRONG></SPAN></TD></TR>
<TR>
<TD class=bvh8><STRONG></STRONG></TD></TR>
<TR>
<TD id=msgcns!A4A8B7175059E42A!273>
<DIV>1 copy() 不需要让写指针后移. <BR>&nbsp; ACE_Message_Block* mb = new ACE_Message_Block(BUFSIZ);<BR>&nbsp; mb-&gt;copy(buff); //buff先已经初始化</DIV>
<DIV>2 初始化mb后需要后移指针的情况<BR>&nbsp; 2.1 <BR>&nbsp; ACE_Message_Block* mb = new ACE_Message_Block(buff,len);<BR>&nbsp; mb-&gt;wt_ptr(len);&nbsp; //len是buff的长度 len = strlen(buff) +1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // +1 表示后面的\0</DIV>
<DIV>&nbsp; 2.2<BR>&nbsp; ACE_Message_Block* mb = new ACE_Message_Block(BUFSIZ);<BR>&nbsp; ACE_OS::sprintf(mb-&gt;wt_ptr(),buff);<BR>&nbsp; mb-&gt;wt_ptr(len); </DIV>
<DIV>&nbsp; 2.3<BR>&nbsp; ACE_Message_Block* mb = new ACE_Message_Block(len,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACE_Message_Block::MB_DATA,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mb2,&nbsp;&nbsp; //表示 mb-&gt;cont(mb2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buff)<BR>&nbsp; mb-&gt;wt_ptr(len);</DIV>
<DIV>3.让消息接成串cont()时,千万不要直接或接间的把它接成一个环<BR>&nbsp;&nbsp; mb-&gt;cont(mb2);<BR>&nbsp;&nbsp; mb2-&gt;cont(mb3); //ok<BR>&nbsp;&nbsp; ***mb3-&gt;cont(mb);&nbsp; //死定了</DIV>
<DIV>4.通知其它线程结束时,可以通过ACE_Message_Block::MB_STOP<BR>&nbsp; <BR>&nbsp; ACE_Message_Block* lastMsg =ACE_Message_Block ,ACE_Message_Block::MB_STOP)</DIV>
<DIV>&nbsp; otherTask-&gt;putq(lastMsg);</DIV>
<DIV><BR>&nbsp; otherTask在接收到的时候如下处理<BR>&nbsp;<BR>&nbsp;&nbsp; 
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;OtherTask::svc()<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_Message_Block</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;mb;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #000000">1</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;getq(mb);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(mb</SPAN><SPAN style="COLOR: #000000">-&gt;</SPAN><SPAN style="COLOR: #000000">get_tpye()&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;ACE_Message_Block::MB_STOP)<BR>&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;mb</SPAN><SPAN style="COLOR: #000000">-&gt;</SPAN><SPAN style="COLOR: #000000">release();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">break</SPAN><SPAN style="COLOR: #000000">;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">退出这个永久限环)</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&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;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_message(mb);&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">处理这条消息</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;end&nbsp;while</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR>&nbsp;&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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR></SPAN></DIV><SPAN id=Codehighlighter1_24_387_Open_Text></SPAN></DIV></TD></TR></TBODY></TABLE><img src ="http://www.cppblog.com/mooyee/aggbug/4197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mooyee/" target="_blank">stone</a> 2006-03-15 13:53 <a href="http://www.cppblog.com/mooyee/archive/2006/03/15/4197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>