﻿<?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++博客-Lemo's Zone</title><link>http://www.cppblog.com/emospring/</link><description>I'm Chinese!</description><language>zh-cn</language><lastBuildDate>Sun, 19 Apr 2026 13:48:04 GMT</lastBuildDate><pubDate>Sun, 19 Apr 2026 13:48:04 GMT</pubDate><ttl>60</ttl><item><title>WSAEVENTSELECT简单篇 之WINDOWS网络IO模型(事件选择模型)</title><link>http://www.cppblog.com/emospring/archive/2008/01/15/41189.html</link><dc:creator>Lemo</dc:creator><author>Lemo</author><pubDate>Tue, 15 Jan 2008 07:43:00 GMT</pubDate><guid>http://www.cppblog.com/emospring/archive/2008/01/15/41189.html</guid><wfw:comment>http://www.cppblog.com/emospring/comments/41189.html</wfw:comment><comments>http://www.cppblog.com/emospring/archive/2008/01/15/41189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/emospring/comments/commentRss/41189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/emospring/services/trackbacks/41189.html</trackback:ping><description><![CDATA[<p>WSAEVENTSELECT模型,局限性很大受WINDOWS操作系统限制WSA_MAXIMUM_WAIT_EVENTS最大为64!也就是连接超过64就需要重新开启新的线程去执行!以下是简单版最大支持64个连接!只是一个简单学习的例子VS2005测试通过!其模型设计难度也比较大!不是非常推荐使用!目前5种模型中各有所长!我还在寻找它的优点!希望有知道的人能留言告诉我嘿嘿!<br>int _tmain(int argc, _TCHAR* argv[])<br>{<br>WSADATA wData;<br>&nbsp;WSAStartup(MAKEWORD(2,2),&amp;wData);<br>WSAEVENT eventArray[WSA_MAXIMUM_WAIT_EVENTS];<br>&nbsp;SOCKET sockArray[WSA_MAXIMUM_WAIT_EVENTS];<br>&nbsp;int nEventToal=0;<br>&nbsp;USHORT nPort=4567;//Sever's Port Number<br>&nbsp;SOCKET sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);<br>&nbsp;sockaddr_in sin;<br>&nbsp;memset(&amp;sin,0,sizeof(sin));<br>&nbsp;sin.sin_family=AF_INET;<br>&nbsp;sin.sin_port=htons(nPort);<br>&nbsp;sin.sin_addr.S_un.S_addr=INADDR_ANY;<br>&nbsp;if(::bind(sListen,(sockaddr*)&amp;sin,sizeof(sockaddr))==SOCKET_ERROR){ //if binding error then reutrn the function<br>&nbsp;&nbsp;std::cout&lt;&lt;"Failed Bind() \n"&lt;&lt;std::endl;<br>&nbsp;&nbsp;return -1;<br>&nbsp;}<br>&nbsp;::listen(sListen,16);<br>&nbsp;WSAEVENT events=::WSACreateEvent(); //create event's object into socket<br>&nbsp;::WSAEventSelect(sListen,events,FD_ACCEPT|FD_CLOSE);<br>&nbsp;eventArray[nEventToal]=events;<br>&nbsp;sockArray[nEventToal]=sListen;<br>&nbsp;++nEventToal;<br>&nbsp;while(TRUE){<br>&nbsp;&nbsp;int nIndex=::WSAWaitForMultipleEvents(nEventToal,eventArray,FALSE,WSA_INFINITE,FALSE);<br>&nbsp;&nbsp;nIndex=nIndex-WSA_WAIT_EVENT_0;<br>&nbsp;&nbsp;for(int i=nIndex;i&lt;nEventToal;i++){<br>&nbsp;&nbsp;&nbsp;nIndex=::WSAWaitForMultipleEvents(1,&amp;eventArray[i],TRUE,1000,FALSE);<br>&nbsp;&nbsp;&nbsp;if(nIndex==WSA_WAIT_FAILED||nIndex==WSA_WAIT_TIMEOUT)<br>&nbsp;&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;&nbsp;else{<br>&nbsp;&nbsp;&nbsp;&nbsp;WSANETWORKEVENTS eventWork;<br>&nbsp;&nbsp;&nbsp;&nbsp;::WSAEnumNetworkEvents(sockArray[i],eventArray[i],&amp;eventWork);<br>&nbsp;&nbsp;&nbsp;&nbsp;if(eventWork.lNetworkEvents &amp; FD_ACCEPT){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(eventWork.iErrorCode[FD_ACCEPT_BIT]==0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(nEventToal&gt;WSA_MAXIMUM_WAIT_EVENTS){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&lt;&lt;"Too many connection!\n"&lt;&lt;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOCKET sNew=::accept(sockArray[i],NULL,NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSAEVENT eventClient=::WSACreateEvent();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSAEventSelect(sNew,eventClient,FD_READ|FD_CLOSE|FD_WRITE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eventArray[nEventToal]=eventClient;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sockArray[nEventToal]=sNew;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++nEventToal;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&lt;&lt;"登陆1个人进来了"&lt;&lt;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}else if(eventWork.lNetworkEvents &amp; FD_READ)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(eventWork.iErrorCode[FD_READ_BIT]==0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char szText[256];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int nRecv=::recv(sockArray[i],szText,strlen(szText),0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(nRecv&gt;0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szText[nRecv]='\0';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&lt;&lt;szText&lt;&lt;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}else if(eventWork.lNetworkEvents &amp; FD_CLOSE){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(eventWork.iErrorCode[FD_CLOSE_BIT]==0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&lt;&lt;"退出了哦"&lt;&lt;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::closesocket(sockArray[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int j=i;j&lt;nEventToal-1;++j){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sockArray[j]=sockArray[j+1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eventArray[j]=eventArray[j+1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eventArray[nEventToal]=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sockArray[nEventToal]=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--nEventToal;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}else if(eventWork.lNetworkEvents &amp;FD_WRITE){<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}</p>
&nbsp;WSACleanup();<br>&nbsp;return 0;<br>}
<img src ="http://www.cppblog.com/emospring/aggbug/41189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/emospring/" target="_blank">Lemo</a> 2008-01-15 15:43 <a href="http://www.cppblog.com/emospring/archive/2008/01/15/41189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++连接MYSQL</title><link>http://www.cppblog.com/emospring/archive/2008/01/10/40878.html</link><dc:creator>Lemo</dc:creator><author>Lemo</author><pubDate>Thu, 10 Jan 2008 04:46:00 GMT</pubDate><guid>http://www.cppblog.com/emospring/archive/2008/01/10/40878.html</guid><wfw:comment>http://www.cppblog.com/emospring/comments/40878.html</wfw:comment><comments>http://www.cppblog.com/emospring/archive/2008/01/10/40878.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/emospring/comments/commentRss/40878.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/emospring/services/trackbacks/40878.html</trackback:ping><description><![CDATA[#include&nbsp;&lt;stdio.h&gt;<br>#include &lt;tchar.h&gt;<br>#include &lt;winsock.h&gt;<br>#include &lt;mysql.h&gt;<br>#include&nbsp;&lt;string.h&gt;<br>#include&nbsp;&lt;windows.h&gt;
<p><br>int _tmain(int argc, _TCHAR* argv[])<br>{<br>&nbsp;&nbsp; MYSQL mysql;&nbsp;&nbsp;&nbsp;&nbsp; // need a instance to init<br>&nbsp;&nbsp; MYSQL_RES *res;<br>&nbsp;&nbsp; MYSQL_ROW row;<br>&nbsp;&nbsp; char *query;<br>&nbsp;&nbsp; int t,r;<br>&nbsp;mysql_init(&amp;mysql);<br>&nbsp;&nbsp; if (!mysql_real_connect(&amp;mysql,"localhost", "root", "330210520", "text",0,NULL,0))<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf( "Error connecting to database: %s\n",mysql_error(&amp;mysql));<br>&nbsp;&nbsp; }<br>&nbsp;else printf("Connected...\n");<br>&nbsp;query = "select * from t1";<br>&nbsp;&nbsp; <br>&nbsp;t = mysql_real_query(&amp;mysql,query,(unsigned int) strlen(query));<br>&nbsp;if (t)<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp; printf("Error making query: %s\n",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mysql_error(&amp;mysql));<br>&nbsp;}<br>&nbsp;else printf("[%s] made...\n", query); <br>&nbsp;res = mysql_store_result(&amp;mysql); <br>&nbsp;while(row = mysql_fetch_row(res))<br>&nbsp;{<br>&nbsp; for(t=0;t&lt;mysql_num_fields(res);t++)<br>&nbsp; {<br>&nbsp;&nbsp; printf("%s ",row[t]);<br>&nbsp; }<br>&nbsp; printf("\n");<br>&nbsp;}<br>&nbsp;<br>&nbsp;printf("mysql_free_result...\n");<br>&nbsp;mysql_free_result(res);&nbsp;&nbsp;&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;// execute the insert query<br>&nbsp;query = "insert into t1(id, name) values(3, 'kunp')";<br>&nbsp;t = mysql_real_query(&amp;mysql,query,(unsigned int) strlen(query));<br>&nbsp;if (t)<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp; printf("Error making query: %s\n",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mysql_error(&amp;mysql));<br>&nbsp;}<br>&nbsp;else printf("[%s] made...\n", query); <br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; mysql_close(&amp;mysql);</p>
<p><br>&nbsp;return 0;<br>}<br><br>刚开始做的时候出了很多问题!不过最重要是要包含socket文件!还有下面2个库 ! 配置了mysql数据库文件下的路径!一个是include还有一个是lib,</p>
<p>libmySQL.lib wsock32.lib 不明白的留言 我在写详细告诉你呵呵!vs下配置MySQL\MySQL Server 5.0\include 和C:\Program Files\MySQL\MySQL Server 5.0\lib\opt</p>
刚试调用过程!发现原来要设置参数CLIENT_MULTI_STATEMENTS<br>mysql_real_connect(&amp;mysql,"localhost", "root", "330210520", "text",0,NULL,0)改为mysql_real_connect(&amp;mysql,"localhost", "root", "330210520", "text",0,NULL,CLIENT_MULTI_STATEMENTS) 嘿嘿郁闷了半天!
<img src ="http://www.cppblog.com/emospring/aggbug/40878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/emospring/" target="_blank">Lemo</a> 2008-01-10 12:46 <a href="http://www.cppblog.com/emospring/archive/2008/01/10/40878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL 2005全文索引</title><link>http://www.cppblog.com/emospring/archive/2007/12/26/39668.html</link><dc:creator>Lemo</dc:creator><author>Lemo</author><pubDate>Wed, 26 Dec 2007 04:11:00 GMT</pubDate><guid>http://www.cppblog.com/emospring/archive/2007/12/26/39668.html</guid><wfw:comment>http://www.cppblog.com/emospring/comments/39668.html</wfw:comment><comments>http://www.cppblog.com/emospring/archive/2007/12/26/39668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/emospring/comments/commentRss/39668.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/emospring/services/trackbacks/39668.html</trackback:ping><description><![CDATA[<p>use text;&nbsp; //进入数据库<br>execute sp_fulltext_database 'enable';//打开全文索引<br>execute sp_fulltext_catalog 'ft_test','create'// 创建全文索引<br>execute sp_fulltext_table 'mx_news_from','create','ft_test','key_index';//<br>execute sp_fulltext_column 'mx_news_from','mxtitle','add';<br>execute sp_fulltext_table 'mx_news_from','activate';<br>execute sp_fulltext_catalog 'ft_test','start_full';<br><br>//执行 查看一下全文索引</p>
<p>select mxtitle<br>from mx_news_from where contains(mxtitle,'梦想')</p>
<p>select mxtitle<br>from mx_news_from<br>where freetext(*,'梦想')</p>
<p>Select fulltextserviceproperty('IsFullTextInstalled')&nbsp; //查看是否安全全文索引组件</p>
<img src ="http://www.cppblog.com/emospring/aggbug/39668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/emospring/" target="_blank">Lemo</a> 2007-12-26 12:11 <a href="http://www.cppblog.com/emospring/archive/2007/12/26/39668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 程序文档生成器(doxygen)用法介绍(转载)</title><link>http://www.cppblog.com/emospring/archive/2007/12/26/39662.html</link><dc:creator>Lemo</dc:creator><author>Lemo</author><pubDate>Wed, 26 Dec 2007 03:06:00 GMT</pubDate><guid>http://www.cppblog.com/emospring/archive/2007/12/26/39662.html</guid><wfw:comment>http://www.cppblog.com/emospring/comments/39662.html</wfw:comment><comments>http://www.cppblog.com/emospring/archive/2007/12/26/39662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/emospring/comments/commentRss/39662.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/emospring/services/trackbacks/39662.html</trackback:ping><description><![CDATA[<p>Doxygen是基于GPL的开源项目，是一个非常优秀的文档系统，当前支持在大多数unix（包括linux），windows家族，Mac系统上运行，完全支持C++, C, Java, IDL（Corba和Microsoft 家族）语言，部分支持PHP和C#语言，输出格式包括HTML、latex、RTF、ps、PDF、压缩的HTML和unix manpage，Doxygen软件可以从这里下载，软件本身用法非常简单。这里不做介绍，下面主要是代码中doxygen的注释的写法的介绍。</p>
<p><br>1. 模块定义（单独显示一页）</p>
<p>/*<br>* @defgroup 模块名 模块的说明文字<br>* @{<br>*/<br>&#8230; 定义的内容 &#8230;<br>/** @} */ // 模块结尾</p>
<p>2. 分组定义（在一页内分组显示）</p>
<p>/*<br>* @name 分组说明文字<br>* @{<br>*/<br>&#8230; 定义的内容 &#8230;<br>/** @} */</p>
<p>3. 变量、宏定义、类型定义简要说明</p>
<p>/** 简要说明文字 */<br>#define FLOAT float</p>
<p>/** @brief 简要说明文字（在前面加 @brief 是标准格式） */<br>#define MIN_UINT 0</p>
<p>/*<br>* 分行的简要说明 \n<br>* 这是第二行的简要说明<br>*/<br>int b;</p>
<p>4. 函数说明</p>
<p>/*<br>* 简要的函数说明文字 <br>* @param [in] param1 参数1说明<br>* @param [out] param2 参数2说明<br>* @return 返回值说明<br>*/</p>
<p>int func(int param1, int param2);</p>
<p>/*<br>* 打开文件 \n<br>* 文件打开成功后，必须使用 ::CloseFile 函数关闭。<br>* @param[in] file_name 文件名字符串<br>* @param[in] file_mode 文件打开模式字符串，可以由以下几个模块组合而成：<br>* - r 读取<br>* - w 可写<br>* - a 添加<br>* - t 文本模式(不能与 b 联用)<br>* - b 二进制模式(不能与 t 联用)<br>* @return 返回文件编号<br>* - -1 表示打开文件失败<br>* @note 文件打开成功后，必须使用 ::CloseFile 函数关闭<br>* @par 示例:<br>* @code<br>// 用文本只读方式打开文件<br>int f = OpenFile(&#8221;d:\\test.txt&#8221;, &#8220;rt&#8221;);<br>* @endcode<br>* @see ::ReadFile ::WriteFile ::CloseFile<br>* @deprecated 由于特殊的原因，这个函数可能会在将来的版本中取消。<br>*/<br>int OpenFile(const char* file_name, const char* file_mode);</p>
<p>5. 枚举类型定义</p>
<p>/** 枚举常量 */<br>typedef enum TDayOfWeek<br>{<br>SUN = 0, /**&lt; 星期天（注意，要以 &#8220;&lt;&#8221; 小于号开头） */<br>MON = 1, /**&lt; 星期一 */ <br>TUE = 2, /**&lt; 星期二 */ <br>WED = 3, /**&lt; 星期三 */ <br>THU = 4, /**&lt; 星期四 */ <br>FRI = 5, /**&lt; 星期五 */ <br>SAT = 6 /**&lt; 星期六 */ <br>}</p>
<p>/** 定义类型 TEnumDayOfWeek */<br>TEnumDayOfWeek;</p>
<p>6. 项目符号标记</p>
<p>/*<br>* A list of events:<br>* - mouse events<br>* -# mouse move event<br>* -# mouse click event\n<br>* More info about the click event.<br>* -# mouse double click event<br>* - keyboard events<br>* -# key down event<br>* -# key up event<br>*<br>* More text here.<br>*/</p>
<p>结果为：</p>
<p>A list of events:</p>
<p>mouse events <br>mouse move event <br>mouse click event<br>More info about the click event. <br>mouse double click event <br>keyboard events <br>key down event <br>key up event <br>More text here.</p>
<p>代码示范：</p>
<p>/*<br>* @defgroup EXAMPLES 自动注释文档范例<br>* @author minidxer<br>* @version 1.0<br>* @date 2007-2008<br>* @{<br>*/</p>
<p>/*<br>* @name 文件名常量<br>* @{<br>*/</p>
<p>/** 日志文件名 */<br>#define LOG_FILENAME &#8220;c:\\log\\debug.log&#8221;<br>/** 数据文件名 */<br>#define DATA_FILENAME &#8220;c:\\data\\detail.dat&#8221;<br>/** 存档文件名 */<br>#define BAK_FILENAME &#8220;c:\\data\\backup.dat&#8221;</p>
<p>/** @}*/ // 文件名常量</p>
<p>/*<br>* @name 系统状态常量<br>* @{<br>*/ </p>
<p>/** 正常状态 */<br>#define SYS_NORMAL 0<br>/** 故障状态 */<br>#define SYS_FAULT 1<br>/** 警告状态 */<br>#define SYS_WARNNING 2</p>
<p>/** @}*/ // 系统状态常量 </p>
<p>/** 枚举常量 */<br>typedef enum TDayOfWeek<br>{<br>SUN = 0, /**&lt; 星期天 */<br>MON = 1, /**&lt; 星期一 */<br>TUE = 2, /**&lt; 星期二 */<br>WED = 3, /**&lt; 星期三 */<br>THU = 4, /**&lt; 星期四 */<br>FRI = 5, /**&lt; 星期五 */<br>SAT = 6 /**&lt; 星期六 */<br>}<br>/** 定义类型 TEnumDayOfWeek */<br>TEnumDayOfWeek;<br>/** 定义类型 PEnumDayOfWeek */<br>typedef TEnumDayOfWeek* PEnumDayOfWeek;</p>
<p>/** 定义枚举变量 enum1 */<br>TEnumDayOfWeek enum1;<br>/** 定义枚举指针变量 enum2 */<br>PEnumDayOfWeek p_enum2;</p>
<p>/*<br>* @defgroup FileUtils 文件操作函数<br>* @{<br>*/ </p>
<p>/*<br>* 打开文件 \n<br>* 文件打开成功后，必须使用 ::CloseFile 函数关闭。<br>* @param[in] file_name 文件名字符串<br>* @param[in] file_mode 文件打开模式字符串，可以由以下几个模块组合而成：<br>* - r 读取<br>* - w 可写<br>* - a 添加<br>* - t 文本模式(不能与 b 联用)<br>* - b 二进制模式(不能与 t 联用)<br>* @return 返回文件编号<br>* - -1 表示打开文件失败 </p>
<p>* @note 文件打开成功后，必须使用 ::CloseFile 函数关闭<br>* @par 示例:<br>* @code<br>// 用文本只读方式打开文件<br>int f = OpenFile(&#8221;c:\\test.txt&#8221;, &#8220;rt&#8221;);<br>* @endcode </p>
<p>* @see ::ReadFile ::WriteFile ::CloseFile<br>* @deprecated 由于特殊的原因，这个函数可能会在将来的版本中取消。<br>*/<br>int OpenFile(const char* file_name, const char* file_mode);</p>
<p>/*<br>* 读取文件<br>* @param[in] file 文件编号，参见：::OpenFile<br>* @param[out] buffer 用于存放读取的文件内容<br>* @param[in] len 需要读取的文件长度<br>* @return 返回读取文件的长度<br>* - -1 表示读取文件失败 </p>
<p>* @pre \e file 变量必须使用 ::OpenFile 返回值<br>* @pre \e buffer 不能为 NULL<br>* @see ::OpenFile ::WriteFile ::CloseFile<br>*/<br>int ReadFile(int file, char* buffer, int len);</p>
<p>/*<br>* 写入文件<br>* @param[in] file 文件编号，参见：::OpenFile<br>* @param[in] buffer 用于存放将要写入的文件内容<br>* @param[in] len 需要写入的文件长度<br>* @return 返回写入的长度<br>* - -1 表示写入文件失败 </p>
<p>* @pre \e file 变量必须使用 ::OpenFile 返回值<br>* @see ::OpenFile ::ReadFile ::CloseFile<br>*/<br>int WriteFile(int file, const char* buffer, int len);</p>
<p>/*<br>* 关闭文件<br>* @param file 文件编号，参见：::OpenFile<br>* @retval 0 为成功<br>* @retval -1 表示失败 </p>
<p>* @see ::OpenFile ::WriteFile ::ReadFile<br>* @deprecated 由于特殊的原因，这个函数可能会在将来的版本中取消。<br>*/<br>int CloseFile(int file);</p>
<p>/** @}*/ // 文件操作函数 </p>
<p>/** @}*/ // 自动注释文档范例</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/emospring/aggbug/39662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/emospring/" target="_blank">Lemo</a> 2007-12-26 11:06 <a href="http://www.cppblog.com/emospring/archive/2007/12/26/39662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用JavaScript实现隐藏推介链接（任意外部链接）(转载)</title><link>http://www.cppblog.com/emospring/archive/2007/12/26/39660.html</link><dc:creator>Lemo</dc:creator><author>Lemo</author><pubDate>Wed, 26 Dec 2007 03:03:00 GMT</pubDate><guid>http://www.cppblog.com/emospring/archive/2007/12/26/39660.html</guid><wfw:comment>http://www.cppblog.com/emospring/comments/39660.html</wfw:comment><comments>http://www.cppblog.com/emospring/archive/2007/12/26/39660.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/emospring/comments/commentRss/39660.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/emospring/services/trackbacks/39660.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>一般的推介链接，比如text-link-ads的<a title=http://www.text-link-ads.com/?ref=131909 href="http://www.text-link-ads.com/?ref=131909"><u><font color=#0000ff>http://www.text-link-ads.com/?ref=131909</font></u></a>，后面会有一个ref=131909这样的后缀，一般人看到这样形式的链接，不管是好的还是坏的，都会有提防心理而不会去点击，另外假如可以将外部链接转成内部链接，对于SEO也比较有好处，记不清是在哪里看到过一篇利用php实现隐藏推介链接的文章（假如有人知道麻烦通知我一下），弄的比较麻烦，实际上利用JavaScript的location，就可以简单的实现隐藏这样的链接。也可以将其转化为人们熟悉的<a title=http://blog.minidx.com/ext/text-link-ads.html onclick="parent.location.href='http://redirect.alexa.com/redirect?http://blog.minidx.com/ext/text-link-ads.html';return event.returnValue=false" href="http://blog.minidx.com/ext/text-link-ads.html"><u><font color=#0000ff>http://blog.minidx.com/ext/text-link-ads.html</font></u></a>这样的格式，或者<a onclick="parent.location.href='http://redirect.alexa.com/redirect?http://blog.minidx.com/ext/text-link-ads/';return event.returnValue=false" href="http://blog.minidx.com/ext/text-link-ads/"><u><font color=#0000ff>http://blog.minidx.com/ext/text-link-ads/</font></u></a>这样的格式。实现效果可以参照《<a onclick="parent.location.href='http://redirect.alexa.com/redirect?http://blog.minidx.com/2007/12/01/189.html';return event.returnValue=false" href="http://blog.minidx.com/2007/12/01/189.html"><u><font color=#0000ff>advertlets，让我又爱又恨的亚洲地区博客的付费评论服务商</font></u></a>》，《<a onclick="parent.location.href='http://redirect.alexa.com/redirect?http://blog.minidx.com/2007/11/24/160.html';return event.returnValue=false" href="http://blog.minidx.com/2007/11/24/160.html"><u><font color=#0000ff>开博1个月不到，照样可以申请到text-link-ads</font></u></a>》，《<a onclick="parent.location.href='http://redirect.alexa.com/redirect?http://blog.minidx.com/2007/11/24/148.html';return event.returnValue=false" href="http://blog.minidx.com/2007/11/24/148.html"><u><font color=#0000ff>PayPal的注册以及使用中需要注意的一些问题</font></u></a>》，《<a onclick="parent.location.href='http://redirect.alexa.com/redirect?http://blog.minidx.com/2007/11/23/136.html';return event.returnValue=false" href="http://blog.minidx.com/2007/11/23/136.html"><u><font color=#0000ff>为比较空闲的人准备的赚钱途径&#8211;taketheinternetback</font></u></a>》，以text-link-ads为例，具体实现方法如下：</p>
<p>&nbsp;</p>
<p>●假如是自主博客(独立博客)，<a title=http://blog.minidx.com/ext/text-link-ads.html onclick="parent.location.href='http://redirect.alexa.com/redirect?http://blog.minidx.com/ext/text-link-ads.html';return event.returnValue=false" href="http://blog.minidx.com/ext/text-link-ads.html"><u><font color=#0000ff>http://blog.minidx.com/ext/text-link-ads.html</font></u></a>这样的链接格式的实现方法：<br>１、创建一个文件，将文件名改为text-link-ads.html，文件内容如下：</p>
&lt;script&gt;location=<span class=str>&#8220;http://www.text-link-ads.com/?ref=131909&#8243;</span>&lt;/script&gt;<br>２、在自己的空间创建ext目录，将刚才的text-link-ads.html上传至该目录下<br>３、在需要做链接的地方就可以使用<a href="http://blog.minidx.com/ext/text-link-ads.html">http://blog.minidx.com/ext/text-link-ads.html</a>这样的URL了。<br>&nbsp;<br>同样的，<a href="http://blog.minidx.com/ext/text-link-ads/">http://blog.minidx.com/ext/text-link-ads/</a>这样的方式可以这样实现：<br>１、创建和上面1同样内容的文件，文件名为index.html或者index.htm或者任意自己服务器设定的默认首页文件名<br>２、在自己的域名blog.minidx.com根目录下的ext目录下创建text-link-ads目录<br>３、上传文件index.html到该目录下<br>４、在需要做链接的地方就可以使用<a href="http://blog.minidx.com/ext/text-link-ads/">http://blog.minidx.com/ext/text-link-ads/</a>这样的URL了。<br>&nbsp;<br>●假如用的是BSP，无法自己做创建目录，上传文件这样的操作，那也没关系，只要BSP支持编辑HTML代码，利用OnClick函数我们也可以实现同样的功能：<br>１、发表文章的地方选择HTML编辑<br>２、在链接的地方添加下面的代码：<br>&lt;a onclick=&#8221;parent.location.href=&#8217;http://www.text-link-ads.com/?ref=131909&#8242;;return event.returnValue=false&#8221; target=&#8221;_blank&#8221; href=&#8221;http://blog.minidx.com/ext/text-link-ads.html&#8221;&gt;text-link-ads&lt;/a&gt;<br>parent.location.href后面的<a href="http://www.text-link-ads.com/?ref=131909">http://www.text-link-ads.com/?ref=131909</a>是实际的链接地址；<a href="http://blog.minidx.com/ext/text-link-ads.html">http://blog.minidx.com/ext/text-link-ads.html</a>是鼠标移上去时候显示在浏览器状态栏的地址，这里你可以写成任意你想写的文字，甚至空白也可以，后面的text-link-ads是显示的文字。图片链接的实现方法也是一样的，不再叙述~<br>&nbsp;<br>●假如既不是独立博客，BSP也不支持编辑HTML或者不支持JavaScrip的编辑&#8230;&#8230;没办法，老老实实贴上原来的URL，该什么样子就什么样子吧。
<img src ="http://www.cppblog.com/emospring/aggbug/39660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/emospring/" target="_blank">Lemo</a> 2007-12-26 11:03 <a href="http://www.cppblog.com/emospring/archive/2007/12/26/39660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++网络编程</title><link>http://www.cppblog.com/emospring/archive/2007/12/23/39416.html</link><dc:creator>Lemo</dc:creator><author>Lemo</author><pubDate>Sun, 23 Dec 2007 13:46:00 GMT</pubDate><guid>http://www.cppblog.com/emospring/archive/2007/12/23/39416.html</guid><wfw:comment>http://www.cppblog.com/emospring/comments/39416.html</wfw:comment><comments>http://www.cppblog.com/emospring/archive/2007/12/23/39416.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/emospring/comments/commentRss/39416.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/emospring/services/trackbacks/39416.html</trackback:ping><description><![CDATA[<p>头文件SOCKETLIBSOCKET_H</p>
<p>#ifndef SOCKETLIBSOCKET_H<br>#define SOCKETLIBSOCKET_H<br>#include "BasicLib/BasicLib.h"<br>#include "SocketLibTypes.h"<br>#include "SocketLibErrors.h"<br>namespace SocketLib<br>{<br>class Socket<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; public:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inline sock GetSock() const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_sock;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inline port GetLocalPort() const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ntohs( m_localinfo.sin_port );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inline ipaddress GetLocalAddress() const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_localinfo.sin_addr.s_addr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Close();</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void SetBlocking( bool p_blockmode );</p>
<p>&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; protected:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Socket( sock p_socket = -1 );</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sock m_sock;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct sockaddr_in m_localinfo;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool m_isblocking;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; };</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; class DataSocket : public Socket<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; public:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSocket( sock p_socket = -1 );</p>
<p>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inline ipaddress GetRemoteAddress() const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_remoteinfo.sin_addr.s_addr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inline port GetRemotePort() const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ntohs( m_remoteinfo.sin_port );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inline bool IsConnected() const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_connected;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Connect( ipaddress p_addr, port p_port );</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int Send( const char* p_buffer, int p_size );</p>
<p>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int Receive( char* p_buffer, int p_size );</p>
<p>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Close();</p>
<p>&nbsp;&nbsp;&nbsp; protected:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool m_connected;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct sockaddr_in m_remoteinfo;</p>
<p>&nbsp;&nbsp;&nbsp; };</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; class ListeningSocket : public Socket<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; public:</p>
<p>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListeningSocket();</p>
<p>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Listen( port p_port );</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSocket Accept();</p>
<p>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inline bool IsListening() const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_listening;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Close();</p>
<p>&nbsp;&nbsp;&nbsp; protected:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool m_listening;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; };</p>
<p><br>}&nbsp;&nbsp; </p>
<p><br>#endif<br><br>//Cpp文件</p>
<p>#include "SocketLibSocket.h"</p>
<p>namespace SocketLib<br>{</p>
<p>&nbsp;&nbsp;&nbsp; void Socket::Close()<br>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp; #ifdef WIN32<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket( m_sock );<br>&nbsp;&nbsp;&nbsp; #else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close( m_sock );<br>&nbsp;&nbsp;&nbsp; #endif</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_sock = -1;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; void Socket::SetBlocking( bool p_blockmode )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int err;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ifdef WIN32<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned long mode = !p_blockmode;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = ioctlsocket( m_sock, FIONBIO, &amp;mode );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #else<br>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int flags = fcntl( m_sock, F_GETFL, 0 );</p>
<p>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( p_blockmode == false )<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;&nbsp; flags |= O_NONBLOCK;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<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;&nbsp; flags &amp;= ~O_NONBLOCK;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = fcntl( m_sock, F_SETFL, flags );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endif</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw( Exception( GetError() ) );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_isblocking = p_blockmode;<br>&nbsp;&nbsp;&nbsp; }</p>
<p><br>&nbsp;&nbsp;&nbsp; Socket::Socket( sock p_socket )<br>&nbsp;&nbsp;&nbsp; : m_sock( p_socket )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( p_socket != -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socklen_t s = sizeof(m_localinfo);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getsockname( p_socket, (sockaddr*)(&amp;m_localinfo), &amp;s );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_isblocking = true;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p><br>&nbsp;&nbsp;&nbsp; DataSocket::DataSocket( sock p_socket )<br>&nbsp;&nbsp;&nbsp; : Socket( p_socket ),<br>&nbsp;&nbsp;&nbsp; m_connected( false )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( p_socket != -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socklen_t s = sizeof(m_remoteinfo);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getpeername( p_socket, (sockaddr*)(&amp;m_remoteinfo), &amp;s );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_connected = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p>
<p><br>&nbsp;&nbsp;&nbsp; void DataSocket::Connect( ipaddress p_addr, port p_port )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int err;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_connected == true )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( EAlreadyConnected );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_sock == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_sock == -1 )<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;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_remoteinfo.sin_family = AF_INET;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_remoteinfo.sin_port = htons( p_port );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_remoteinfo.sin_addr.s_addr = p_addr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset( &amp;(m_remoteinfo.sin_zero), 0, 8 );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socklen_t s = sizeof(struct sockaddr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = connect( m_sock, (struct sockaddr*)(&amp;m_remoteinfo), s );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_connected = true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = getsockname( m_sock, (struct sockaddr*)(&amp;m_localinfo), &amp;s );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err != 0 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; int DataSocket::Send( const char* p_buffer, int p_size )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int err;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_connected == false )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( ENotConnected );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = send( m_sock, p_buffer, p_size, 0 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Error e = GetError();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( e != EOperationWouldBlock )<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;&nbsp; throw Exception( e );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; int DataSocket::Receive( char* p_buffer, int p_size )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int err;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_connected == false )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( ENotConnected );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = recv( m_sock, p_buffer, p_size, 0 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err == 0 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( EConnectionClosed );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; void DataSocket::Close()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_connected == true )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shutdown( m_sock, 2 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Socket::Close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_connected = false;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; ListeningSocket::ListeningSocket()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_listening = false;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; void ListeningSocket::Listen( port p_port )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int err;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_sock == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_sock == -1 )<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;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int reuse = 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = setsockopt( m_sock, SOL_SOCKET, SO_REUSEADDR, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (char*)(&amp;reuse), sizeof( reuse ) );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err != 0 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_localinfo.sin_family = AF_INET;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_localinfo.sin_port = htons( p_port );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_localinfo.sin_addr.s_addr = htonl( INADDR_ANY );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset( &amp;(m_localinfo.sin_zero), 0, 8 );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = bind( m_sock, (struct sockaddr*)&amp;m_localinfo, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sizeof(struct sockaddr));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = listen( m_sock, 8 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( err == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_listening = true;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; DataSocket ListeningSocket::Accept()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sock s;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct sockaddr_in socketaddress;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socklen_t size = sizeof(struct sockaddr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = accept( m_sock, (struct sockaddr*)&amp;socketaddress, &amp;size );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( s == -1 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw Exception( GetError() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DataSocket( s );<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; void ListeningSocket::Close()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Socket::Close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_listening = false;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>}&nbsp; <br><br>主要的2个文件 其他的文件明天在贴出来.对SOCKET进行封装.只为复用<br></p>
<p><br>#include "SocketLib/SocketLib.h"<br>#include &lt;iostream&gt;</p>
<p>using namespace SocketLib;</p>
<p>int main() <br>{<br>&nbsp;&nbsp;&nbsp; ListeningSocket lsock;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; DataSocket dsock;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; char buffer[128];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;int size = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; int received;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; bool emo=false;<br>&nbsp;&nbsp;&nbsp; unsigned long mode =!emo;<br>&nbsp;&nbsp;&nbsp; std::cout&lt;&lt;mode&lt;&lt;std::endl;<br>&nbsp;&nbsp;&nbsp; lsock.Listen( 5098 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; dsock = lsock.Accept();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; dsock.Send( "Hello!\r\n", 8 );</p>
<p>&nbsp;&nbsp;&nbsp; while( true ) <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; received = dsock.Receive( buffer + size, 128 - size );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size += received;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( buffer[size - 1] == '\n' ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; size &lt;&lt; std::endl;</p>
<p>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dsock.Send( buffer, size );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br></p>
主执行CPP!累了一天了 终于可以休息了嘿嘿 ! 有问题可以留言呵呵!我也是刚入门C++不久
<img src ="http://www.cppblog.com/emospring/aggbug/39416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/emospring/" target="_blank">Lemo</a> 2007-12-23 21:46 <a href="http://www.cppblog.com/emospring/archive/2007/12/23/39416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>