﻿<?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++博客-伟大的程序员-文章分类-socket   编程</title><link>http://www.cppblog.com/changshoumeng/category/13002.html</link><description>我要在代码的世界里只心生命的律动，
我要在智慧的王国里探知最高的理智，
我要成为一个真正伟大的程序员。
为此，我永不停息！
我永不停息！
我永不停息！</description><language>zh-cn</language><lastBuildDate>Sat, 01 May 2010 17:23:47 GMT</lastBuildDate><pubDate>Sat, 01 May 2010 17:23:47 GMT</pubDate><ttl>60</ttl><item><title>消息处理线程</title><link>http://www.cppblog.com/changshoumeng/articles/113827.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Wed, 28 Apr 2010 02:45:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/113827.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/113827.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/113827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/113827.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/113827.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1//函数名称：IOThreadProc&nbsp;&nbsp;2//函数功能：消息处理的线程&nbsp;&nbsp;3//处理对象：核心函数&nbsp;&nbsp;4//研究人员：长寿梦&nbsp;&nbsp;&nbsp;5DWORD&nbsp;WINAPI&nbsp;CP2PServer::IOThreadProc(LPVOID&nbsp;&nbsp;lpParam)&...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/113827.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/113827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-04-28 10:45 <a href="http://www.cppblog.com/changshoumeng/articles/113827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Socket模型详解(转)</title><link>http://www.cppblog.com/changshoumeng/articles/113441.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Sat, 24 Apr 2010 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/113441.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/113441.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/113441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/113441.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/113441.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Socket模型详解两种I/O模式... 1一.选择模型... 2二.异步选择... 6三.事件选择... 9四.重叠I/O模型... 11五.完成端口模型... 18五种I/O模型的比较... 21&nbsp;&nbsp;&nbsp;两种I/O模式1、 两种I/O模式 阻塞模式：执行I/O操作完成前会一直进行等待，不会将控制权交给程序。套接字默...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/113441.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/113441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-04-24 15:50 <a href="http://www.cppblog.com/changshoumeng/articles/113441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用MFC类库进行socket编程的入门实例</title><link>http://www.cppblog.com/changshoumeng/articles/112813.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Fri, 16 Apr 2010 16:11:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/112813.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/112813.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/112813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/112813.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/112813.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用MFC类库实现回声程序Zhangtaolmq&nbsp; 2010/04/16&nbsp;程序名称：回声程序程序功能：客户端把数据发送给服务端，服务端收到数据后，立即将数据原样返回给客户端。&nbsp;一． 客户端的创建&nbsp;1． 使用[MFC AppWizard (exe)]创建一个[Dialog Based]项目：CSockClient。 2． 设...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/112813.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/112813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-04-17 00:11 <a href="http://www.cppblog.com/changshoumeng/articles/112813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取本机MAC地址</title><link>http://www.cppblog.com/changshoumeng/articles/107422.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Sun, 07 Feb 2010 02:18:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/107422.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/107422.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/107422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/107422.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/107422.html</trackback:ping><description><![CDATA[导入netapi32.lib和"nb30.h"<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">CString&nbsp;strMac;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;NCB&nbsp;ncb;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ADAPTER_STATUS&nbsp;adapt;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ncb,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ncb));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ncb.ncb_command&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NCBRESET;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">首先对网卡发送一个NCBRESET命令以便进行初始化&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Netbios(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ncb);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ncb.ncb_command&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NCBASTAT;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strcpy((</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)ncb.ncb_callname,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;指定返回的信息存放的变量&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ncb.ncb_buffer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(unsigned&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">adapt;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ncb.ncb_length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(adapt);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;发送NCBASTAT命令以获取网卡的信息&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Netbios(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ncb);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;把网卡MAC地址格式化成常用的16进制形式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;strMac.Format(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%02X%02X-%02X%02X-%02X%02X\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adapt.adapter_address[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adapt.adapter_address[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adapt.adapter_address[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adapt.adapter_address[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">],<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adapt.adapter_address[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">],<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adapt.adapter_address[</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">]);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_edit.SetWindowText(strMac);</span></div>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/107422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-07 10:18 <a href="http://www.cppblog.com/changshoumeng/articles/107422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过计算机名获取IP地址</title><link>http://www.cppblog.com/changshoumeng/articles/107390.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Sat, 06 Feb 2010 09:48:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/107390.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/107390.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/107390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/107390.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/107390.html</trackback:ping><description><![CDATA[<p>通过计算机名获取IP地址<br>&nbsp;<br><strong>导入库 ws2_32.lib和头文件 afxsock.h</strong><br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">CString&nbsp;str</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">,name;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_name.GetWindowText(name);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;hostent&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pHost;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pHost&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gethostbyname(name);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_131_278_Open_Image onclick="this.style.display='none'; Codehighlighter1_131_278_Open_Text.style.display='none'; Codehighlighter1_131_278_Closed_Image.style.display='inline'; Codehighlighter1_131_278_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_131_278_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_131_278_Closed_Text.style.display='none'; Codehighlighter1_131_278_Open_Image.style.display='inline'; Codehighlighter1_131_278_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_131_278_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_131_278_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;addr;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_163_182_Open_Image onclick="this.style.display='none'; Codehighlighter1_163_182_Open_Text.style.display='none'; Codehighlighter1_163_182_Closed_Image.style.display='inline'; Codehighlighter1_163_182_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_163_182_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_182_Closed_Text.style.display='none'; Codehighlighter1_163_182_Open_Image.style.display='inline'; Codehighlighter1_163_182_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_163_182_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_163_182_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr.Format(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%u</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,(unsigned&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)((unsigned&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)pHost</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_addr_list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">])[i]);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;addr;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_ip.SetWindowText(str);</span></div>
<img height=162 alt="" src="http://www.cppblog.com/images/cppblog_com/changshoumeng/getip.jpg" width=262 border=0>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/107390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-06 17:48 <a href="http://www.cppblog.com/changshoumeng/articles/107390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何获得计算机名称和工作组</title><link>http://www.cppblog.com/changshoumeng/articles/107308.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Fri, 05 Feb 2010 13:33:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/107308.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/107308.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/107308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/107308.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/107308.html</trackback:ping><description><![CDATA[如何获得计算机名称和工作组<br>初始化程序时，导入mpr.lib和winnetwk.h<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">&nbsp;&nbsp;&nbsp;&nbsp;m_grid.InsertColumn(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">局域网内工作组</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,LVCFMT_LEFT,</span><span style="COLOR: #000000">220</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;nSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MAX_COMPUTERNAME_LENGTH&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;Buffer[MAX_COMPUTERNAME_LENGTH&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;GetComputerName(Buffer,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nSize);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">得到主机名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_edit.SetWindowText(Buffer);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">显示主机名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;Count</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0xFFFFFFFF</span><span style="COLOR: #000000">,Bufsize</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">4096</span><span style="COLOR: #000000">,Res;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;NETRESOURCE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;nRes;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;NETRESOURCE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;nRes1;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;lphEnum;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LPVOID&nbsp;Buf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">4096</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LPVOID&nbsp;Bufwg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">4096</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--------------------------------------------------------------------<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WNetOpenEnum启动网络资源进行枚举</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Res&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;WNetOpenEnum(RESOURCE_GLOBALNET,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">枚举范围为全球网络资源</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RESOURCETYPE_ANY,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">枚举类型为所有类型</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RESOURCEUSAGE_CONTAINER,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">All&nbsp;container&nbsp;resources.</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">空指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lphEnum);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">存储枚举过程句柄的变量<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WNetEnumResource获得枚举的网络资源</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Res</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">WNetEnumResource(lphEnum,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">由WNetOpenEnum函数传入</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&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;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Count,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取的资源的最大数目</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&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;Buf,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">指向存储枚举结果的缓冲区地址的指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&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;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Bufsize);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">指向存储缓冲区大小的变量地址的指针<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">存储网络资源的结构体</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;nRes</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(NETRESOURCE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)Buf;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回Microsoft&nbsp;Terminal&nbsp;Services<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">----------------通过循环枚举当前资源的下一层资源---------------------</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(DWORD&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;n</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Count;n</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">,nRes</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1045_1537_Open_Image onclick="this.style.display='none'; Codehighlighter1_1045_1537_Open_Text.style.display='none'; Codehighlighter1_1045_1537_Closed_Image.style.display='inline'; Codehighlighter1_1045_1537_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1045_1537_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1045_1537_Closed_Text.style.display='none'; Codehighlighter1_1045_1537_Open_Image.style.display='inline'; Codehighlighter1_1045_1537_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1045_1537_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_1045_1537_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;NUM</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0xFFFFFFFF</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Res&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;WNetOpenEnum(RESOURCE_GLOBALNET,&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RESOURCETYPE_ANY,&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">All&nbsp;resources.</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nRes,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;nRes=(NETRESOURCE*)Buf;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lphEnum);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Res</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">WNetEnumResource(lphEnum,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">NUM,Bufwg,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Bufsize);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Bufsize</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(NETRESOURCE);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">群组数目</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nRes1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(NETRESOURCE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)Bufwg;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">循环枚举每一个工作组名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(DWORD&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">NUM;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">,nRes1</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1454_1534_Open_Image onclick="this.style.display='none'; Codehighlighter1_1454_1534_Open_Text.style.display='none'; Codehighlighter1_1454_1534_Closed_Image.style.display='inline'; Codehighlighter1_1454_1534_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1454_1534_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1454_1534_Closed_Text.style.display='none'; Codehighlighter1_1454_1534_Open_Image.style.display='inline'; Codehighlighter1_1454_1534_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1454_1534_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_1454_1534_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_grid.InsertItem(i,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_grid.SetItemText(i,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,nRes1</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">lpRemoteName);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--------------------------------------------------------------------</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;Buf;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;Bufwg;<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>&nbsp;&nbsp;&nbsp;&nbsp;WNetCloseEnum(lphEnum);</span></div>
<br><img height=350 alt="" src="http://www.cppblog.com/images/cppblog_com/changshoumeng/hhhhhhhhhh.jpg" width=279 border=0> 
<img src ="http://www.cppblog.com/changshoumeng/aggbug/107308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-05 21:33 <a href="http://www.cppblog.com/changshoumeng/articles/107308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UDP程序</title><link>http://www.cppblog.com/changshoumeng/articles/107125.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Wed, 03 Feb 2010 12:51:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/107125.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/107125.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/107125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/107125.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/107125.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: UDP01#include&nbsp;&lt;windows.h&gt;#include&nbsp;&lt;winsock.h&gt;#pragma&nbsp;comment(lib,"ws2_32.lib")HINSTANCE&nbsp;hInst;LRESULT&nbsp;CALLBACK&nbsp;WndProc(HWND,UINT,WPARAM,LPARAM);int&nbsp;API...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/107125.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/107125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-03 20:51 <a href="http://www.cppblog.com/changshoumeng/articles/107125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>套接口属性设置和获取实例</title><link>http://www.cppblog.com/changshoumeng/articles/107061.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Wed, 03 Feb 2010 00:53:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/107061.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/107061.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/107061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/107061.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/107061.html</trackback:ping><description><![CDATA[套接口属性设置和获取实例<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 id=Codehighlighter1_0_124_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_124_Open_Text.style.display='none'; Codehighlighter1_0_124_Closed_Image.style.display='inline'; Codehighlighter1_0_124_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_124_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_124_Closed_Text.style.display='none'; Codehighlighter1_0_124_Open_Image.style.display='inline'; Codehighlighter1_0_124_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_124_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_0_124_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*****************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>程序名称：socketopt.cpp&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>程序功能：该程序演示了getsockopt()函数和setsockopt()函数用法<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;changshoumeng&nbsp;</span><span style="COLOR: #008000">*/</span></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>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">winsock2.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma&nbsp;comment(lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ws2_32.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">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_234_2065_Open_Image onclick="this.style.display='none'; Codehighlighter1_234_2065_Open_Text.style.display='none'; Codehighlighter1_234_2065_Closed_Image.style.display='inline'; Codehighlighter1_234_2065_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_234_2065_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_234_2065_Closed_Text.style.display='none'; Codehighlighter1_234_2065_Open_Image.style.display='inline'; Codehighlighter1_234_2065_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_234_2065_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_234_2065_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WSADATA&nbsp;wsaData;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;SOCKET&nbsp;s;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;optname;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">存放选项的值</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;optlen;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">选项的长度</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(WSAStartup(MAKEWORD(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">wsaData)&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_359_415_Open_Image onclick="this.style.display='none'; Codehighlighter1_359_415_Open_Text.style.display='none'; Codehighlighter1_359_415_Closed_Image.style.display='inline'; Codehighlighter1_359_415_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_359_415_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_359_415_Closed_Text.style.display='none'; Codehighlighter1_359_415_Open_Image.style.display='inline'; Codehighlighter1_359_415_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_359_415_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_359_415_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Failed&nbsp;to&nbsp;load&nbsp;winsock.&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;socket(AF_INET,SOCK_STREAM,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建一个套接口</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;INVALID_SOCKET)<br><img id=Codehighlighter1_494_541_Open_Image onclick="this.style.display='none'; Codehighlighter1_494_541_Open_Text.style.display='none'; Codehighlighter1_494_541_Closed_Image.style.display='inline'; Codehighlighter1_494_541_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_494_541_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_494_541_Closed_Text.style.display='none'; Codehighlighter1_494_541_Open_Image.style.display='inline'; Codehighlighter1_494_541_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_494_541_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_494_541_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">socket()&nbsp;Error&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;optlen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(optname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">---------------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获得套接口类型</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockopt(s,SOL_SOCKET,SO_TYPE,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optlen)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SOCKET_ERROR)<br><img id=Codehighlighter1_709_783_Open_Image onclick="this.style.display='none'; Codehighlighter1_709_783_Open_Text.style.display='none'; Codehighlighter1_709_783_Closed_Image.style.display='inline'; Codehighlighter1_709_783_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_709_783_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_709_783_Closed_Text.style.display='none'; Codehighlighter1_709_783_Open_Image.style.display='inline'; Codehighlighter1_709_783_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_709_783_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_709_783_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">以下信息是由getsockopt()函数取得的SO_SOCKET&nbsp;级别选项实例\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(optname)<br><img id=Codehighlighter1_861_1049_Open_Image onclick="this.style.display='none'; Codehighlighter1_861_1049_Open_Text.style.display='none'; Codehighlighter1_861_1049_Closed_Image.style.display='inline'; Codehighlighter1_861_1049_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_861_1049_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_861_1049_Closed_Text.style.display='none'; Codehighlighter1_861_1049_Open_Image.style.display='inline'; Codehighlighter1_861_1049_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_861_1049_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_861_1049_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;SOCK_STREAM:&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_TYPE:SOCK_STREAM&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;SOCK_DGRAM&nbsp;:&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_TYPE:SOCK_DGRAM&nbsp;&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;SOCK_RAW&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_TYPE:SOCK_RAW&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取接收缓冲区的大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optlen)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SOCKET_ERROR)<br><img id=Codehighlighter1_1151_1226_Open_Image onclick="this.style.display='none'; Codehighlighter1_1151_1226_Open_Text.style.display='none'; Codehighlighter1_1151_1226_Closed_Image.style.display='inline'; Codehighlighter1_1151_1226_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1151_1226_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1151_1226_Closed_Text.style.display='none'; Codehighlighter1_1151_1226_Open_Image.style.display='inline'; Codehighlighter1_1151_1226_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1151_1226_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_1151_1226_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_RCVBUF:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,optname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取发送缓冲区的大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockopt(s,SOL_SOCKET,SO_SNDBUF,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optlen)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SOCKET_ERROR)<br><img id=Codehighlighter1_1369_1444_Open_Image onclick="this.style.display='none'; Codehighlighter1_1369_1444_Open_Text.style.display='none'; Codehighlighter1_1369_1444_Closed_Image.style.display='inline'; Codehighlighter1_1369_1444_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1369_1444_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1369_1444_Closed_Text.style.display='none'; Codehighlighter1_1369_1444_Open_Image.style.display='inline'; Codehighlighter1_1369_1444_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1369_1444_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_1369_1444_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_SNDBUF:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,optname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;optname&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重新设置缓冲区的大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(optname)&nbsp;)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;SOCKET_ERROR)<br><img id=Codehighlighter1_1620_1696_Open_Image onclick="this.style.display='none'; Codehighlighter1_1620_1696_Open_Text.style.display='none'; Codehighlighter1_1620_1696_Closed_Image.style.display='inline'; Codehighlighter1_1620_1696_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1620_1696_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1620_1696_Closed_Text.style.display='none'; Codehighlighter1_1620_1696_Open_Image.style.display='inline'; Codehighlighter1_1620_1696_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1620_1696_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_1620_1696_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">setsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取重新设置的接收缓冲区的大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optname,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">optlen)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;SOCKET_ERROR)<br><img id=Codehighlighter1_1804_1880_Open_Image onclick="this.style.display='none'; Codehighlighter1_1804_1880_Open_Text.style.display='none'; Codehighlighter1_1804_1880_Closed_Image.style.display='inline'; Codehighlighter1_1804_1880_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1804_1880_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1804_1880_Closed_Text.style.display='none'; Codehighlighter1_1804_1880_Open_Image.style.display='inline'; Codehighlighter1_1804_1880_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1804_1880_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_1804_1880_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getsockopt()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">---------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">使用setsockopt()函数设置后再取得的SO_RCVBUF数值\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SO_RCVBUF:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,optname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">---------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;WSACleanup();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img height=218 alt="" src="http://www.cppblog.com/images/cppblog_com/changshoumeng/setsock.jpg" width=455 border=0>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/107061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-03 08:53 <a href="http://www.cppblog.com/changshoumeng/articles/107061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络信息获取函数应用实例</title><link>http://www.cppblog.com/changshoumeng/articles/107014.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Tue, 02 Feb 2010 06:46:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/107014.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/107014.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/107014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/107014.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/107014.html</trackback:ping><description><![CDATA[<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 id=Codehighlighter1_0_253_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_253_Open_Text.style.display='none'; Codehighlighter1_0_253_Closed_Image.style.display='inline'; Codehighlighter1_0_253_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_253_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_253_Closed_Text.style.display='none'; Codehighlighter1_0_253_Open_Image.style.display='inline'; Codehighlighter1_0_253_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_253_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_0_253_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">**************************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;调试环境：VC++6.0<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;程序名称：host.cpp<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;程序功能：该程序使用网络信息获取函数取得主机的有关信息，<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用以下三个函数：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gethostname()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gethostbyname()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getprotobyname()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;*************************************changshoumeng</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">winsock2.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma&nbsp;comment(lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ws2_32.lib</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></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_363_1927_Open_Image onclick="this.style.display='none'; Codehighlighter1_363_1927_Open_Text.style.display='none'; Codehighlighter1_363_1927_Closed_Image.style.display='inline'; Codehighlighter1_363_1927_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_363_1927_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_363_1927_Closed_Text.style.display='none'; Codehighlighter1_363_1927_Open_Image.style.display='inline'; Codehighlighter1_363_1927_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_363_1927_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_363_1927_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WSADATA&nbsp;wsaData;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;hostname[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;hostent&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pHostent;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">主机信息指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;protoent&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pProtoent;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">主机协议指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;sockaddr_in&nbsp;sa;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">本机地址信息</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(WSAStartup(MAKEWORD(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">wsaData)&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_555_612_Open_Image onclick="this.style.display='none'; Codehighlighter1_555_612_Open_Text.style.display='none'; Codehighlighter1_555_612_Closed_Image.style.display='inline'; Codehighlighter1_555_612_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_555_612_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_555_612_Closed_Text.style.display='none'; Codehighlighter1_555_612_Open_Image.style.display='inline'; Codehighlighter1_555_612_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_555_612_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_555_612_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Failed&nbsp;to&nbsp;load&nbsp;Winsock.&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">--------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(gethostname(hostname,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(hostname))&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_703_776_Open_Image onclick="this.style.display='none'; Codehighlighter1_703_776_Open_Text.style.display='none'; Codehighlighter1_703_776_Closed_Image.style.display='inline'; Codehighlighter1_703_776_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_703_776_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_703_776_Closed_Text.style.display='none'; Codehighlighter1_703_776_Open_Image.style.display='inline'; Codehighlighter1_703_776_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_703_776_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_703_776_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">gethostname()&nbsp;Error:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">以下信息是由gethostname()函数取得\n&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Local&nbsp;host&nbsp;name:&nbsp;%s&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,hostname);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;pHostent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gethostbyname(hostname);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回指定主机名的信息</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pHostent&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">NULL)<br><img id=Codehighlighter1_977_1053_Open_Image onclick="this.style.display='none'; Codehighlighter1_977_1053_Open_Text.style.display='none'; Codehighlighter1_977_1053_Closed_Image.style.display='inline'; Codehighlighter1_977_1053_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_977_1053_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_977_1053_Closed_Text.style.display='none'; Codehighlighter1_977_1053_Open_Image.style.display='inline'; Codehighlighter1_977_1053_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_977_1053_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_977_1053_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">gethostbyname()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">以下信息由gethostbyname()函数取得\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name:%s\n&nbsp;aliases:%d\n&nbsp;addrtype:%d\n&nbsp;length:%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_name,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">名称</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_aliases,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">别名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_addrtype,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">地址类型</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_length&nbsp;&nbsp;);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">地址长度</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_addr_list[n];n</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1323_1467_Open_Image onclick="this.style.display='none'; Codehighlighter1_1323_1467_Open_Text.style.display='none'; Codehighlighter1_1323_1467_Closed_Image.style.display='inline'; Codehighlighter1_1323_1467_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1323_1467_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1323_1467_Closed_Text.style.display='none'; Codehighlighter1_1323_1467_Open_Image.style.display='inline'; Codehighlighter1_1323_1467_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_1323_1467_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_1323_1467_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;memcpy(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">sa.sin_addr.s_addr,pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_addr_list[n],&nbsp;pHostent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">h_length);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Address:%s&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,inet_ntoa(sa.sin_addr));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">主机地址即IP地址</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;pProtoent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getprotobyname(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tcp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回指定协议的信息</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pProtoent&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br><img id=Codehighlighter1_1580_1657_Open_Image onclick="this.style.display='none'; Codehighlighter1_1580_1657_Open_Text.style.display='none'; Codehighlighter1_1580_1657_Closed_Image.style.display='inline'; Codehighlighter1_1580_1657_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1580_1657_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1580_1657_Closed_Text.style.display='none'; Codehighlighter1_1580_1657_Open_Image.style.display='inline'; Codehighlighter1_1580_1657_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_1580_1657_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_1580_1657_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getprotobyname()&nbsp;Error:&nbsp;%u&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,WSAGetLastError());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">以下信息由&nbsp;getprotobyname()函数取得&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name:%s&nbsp;\n&nbsp;proto:%d&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pProtoent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">p_name,</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">协议名</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pProtoent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">p_proto&nbsp;);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">以主机顺序排列的协议号</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;pProtoent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">p_aliases[n];n</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1847_1908_Open_Image onclick="this.style.display='none'; Codehighlighter1_1847_1908_Open_Text.style.display='none'; Codehighlighter1_1847_1908_Closed_Image.style.display='inline'; Codehighlighter1_1847_1908_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1847_1908_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1847_1908_Closed_Text.style.display='none'; Codehighlighter1_1847_1908_Open_Image.style.display='inline'; Codehighlighter1_1847_1908_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_1847_1908_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_1847_1908_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">aliases:&nbsp;%s&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,pProtoent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">p_aliases[n]);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WSACleanup();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br><img height=327 alt="" src="http://www.cppblog.com/images/cppblog_com/changshoumeng/host.jpg" width=361 border=0> 
<img src ="http://www.cppblog.com/changshoumeng/aggbug/107014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-02 14:46 <a href="http://www.cppblog.com/changshoumeng/articles/107014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Socket编程笔记</title><link>http://www.cppblog.com/changshoumeng/articles/106991.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Tue, 02 Feb 2010 01:24:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/106991.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/106991.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/106991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/106991.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/106991.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><font face=Calibri>Socket</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">编程笔记一：网络应用程序的概念</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">网络应用程序设计，最基本的两个问题是：</span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-no-proof: yes">①</span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">通信的进程<strong style="mso-bidi-font-weight: normal"><u>如何相互识别</u></strong>；</span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-no-proof: yes">②</span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">双方采用<strong style="mso-bidi-font-weight: normal">怎样</strong>的方式<strong style="mso-bidi-font-weight: normal"><u>进行联系</u></strong>。</span><span lang=EN-US style="COLOR: red"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">什么是网络应用程序？</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">应用程序可以简单地分为：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-no-proof: yes">①</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">无通信应用程序</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-no-proof: yes">②</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">通信的应用程序（<span style="COLOR: red">网络应用程序</span>）</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">进程间通信的问题可以分为两种：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-no-proof: yes">①</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">单击系统的进程通信。消息、信号量、共享存储区。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-no-proof: yes">②</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">不同系统的进程。<span style="COLOR: red">网络通信协议</span>。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">网络应用程序的识别问题</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">半相关</span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">：为了唯一地标识网络中通信的一个进程，即通信一方，就要使用一个如下的三元组：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">（本地协议，本地</span><span lang=EN-US style="COLOR: red"><font face=Calibri>IP</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">地址，本地端口号）</span><span lang=EN-US style="COLOR: red"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">相关：一个五元组可以唯一标识网络中两个通信的进程或一条连接</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">（协议，本地</span><span lang=EN-US style="COLOR: red"><font face=Calibri>IP</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">地址，本地端口号，远程</span><span lang=EN-US style="COLOR: red"><font face=Calibri>IP</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">地址，远程端口号）</span><span lang=EN-US style="COLOR: red"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">网络程序联系的模型：客户</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><font face=Calibri>/</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">服务器</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务器的分类：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">串行服务器</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">：服务器只有一个进程用串行的方式对客户地请求提供服务；</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">并发服务器</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">：服务器可以为分别每个客户请求创建进程或线程并提供服务；</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务器特点：</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>1.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务进程一般在<span style="COLOR: red">启动后就一直运行，以等待客户请求的到来</span>，除非服务被禁止或执行强迫终止服务程序。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>2.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务器方进程<span style="COLOR: red">使用的是众所周知的端口</span>，否则客户无法知道提供服务的端口</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>3.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务器方通常拥有较多的资源。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>4.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务器方进程可以<span style="COLOR: red">并行处理</span>多个客户的请求，但可以同时处理的客户请求数目是有一定限制的</span><span style="FONT-SIZE: 9pt"><font face=Calibri> </font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>5.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务器方在通信时属于<span style="COLOR: red">被动</span>的一方。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">客户方：</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l1 level1 lfo2"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>1.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在<u><span style="COLOR: red">需要服务时向服务器提出请求，请求的服务得到满足并完成处理任务后，就终止客户程序的执行</span></u>。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l1 level1 lfo2"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>2.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">使用向系统申请的<span style="COLOR: red">临时端口</span>与服务器方进程进行通信。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l1 level1 lfo2"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>3.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">拥有相对较少的资源。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l1 level1 lfo2"><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>4.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">客户方在通信时属于<span style="COLOR: red">主动</span>的一方。</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><font face=Calibri>Socket</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">编程笔记二：</span><span lang=EN-US><font face=Calibri>Tcp/ip</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">应用程序工作模型与网络编程接口</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><em style="mso-bidi-font-style: normal"><span lang=EN-US><font face=Calibri>Tcp/ip</font></span></em><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">协议的核心内容被封装到操作系统中，系统提供网络编程接口</span><span lang=EN-US><font face=Calibri>Windows Sockets</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">用于网络程序设计。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><font face=Calibri>Tcp/ip</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">应用程序工作模型</span></strong><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">客户应用程序</span><span lang=EN-US><font face=Calibri><span style="mso-spacerun: yes">&nbsp; </span>--------------------------</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务器应用程序</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>|<span style="mso-spacerun: yes">&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;&nbsp;&nbsp; </span>|</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">网络编程接口</span><span lang=EN-US><font face=Calibri>-<span style="mso-spacerun: yes">&nbsp; </span>--------------------------</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">网络编程接口</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>|<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>|</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>TCP/IP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">核心协议</span><span lang=EN-US><font face=Calibri> ------------------------ TCP/IP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">核心协议</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>|<span style="mso-spacerun: yes">&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;&nbsp;&nbsp; </span>|</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">物理传输介质</span><span lang=EN-US><font face=Calibri><span style="mso-spacerun: yes">&nbsp; </span><u>--------------------------</u> </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">物理传输介质</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes"><font face=Calibri>&nbsp; </font></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">用户在进行</span><span lang=EN-US><font face=Calibri>TCP/IP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">程序设计时，最关键的问题是要熟悉所用平台提供的网络编程界面</span><span lang=EN-US><font face=Calibri>API</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">网络编程接口</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><font face=Calibri>Winsock </font></span></strong><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>Winsock</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的版本：</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l2 level1 lfo3"><span lang=EN-US style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>1.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US><font face=Calibri>Winsock1.1 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">；</span><span lang=EN-US><font face=Calibri>16</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">位，由</span><span lang=EN-US><font face=Calibri>Winsock.dll</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">支持</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l2 level1 lfo3"><span lang=EN-US style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>2.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US style="COLOR: red"><font face=Calibri>Winsock2.2 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">；</span><span lang=EN-US><font face=Calibri>32</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">位，由</span><span lang=EN-US><font face=Calibri>Wsock32.dl</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">支持</span><span lang=EN-US><font face=Calibri>l</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>WinsockAPI</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">函数分类：</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l3 level1 lfo4"><span lang=EN-US style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>1.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">与</span><span lang=EN-US><font face=Calibri>BSDSoket</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">（</span><span lang=EN-US><font face=Calibri>Unix</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">）相兼容的基本函数</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l3 level1 lfo4"><span lang=EN-US style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>2.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">网络数据信息检索函数</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l3 level1 lfo4"><span lang=EN-US style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>3.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US><font face=Calibri>Windows</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">专用扩展函数</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 36.15pt; TEXT-ALIGN: center; mso-char-indent-count: 3.43; mso-para-margin-left: 2.0gd" align=center><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><font face=Calibri>Socket</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">编程笔记三：套接口的概念与其编程原理</span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">套接口</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><font face=Calibri>Soket <o:p></o:p></font></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">程序</span><span lang=EN-US><font face=Calibri>A</font></span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">——<span style="COLOR: red">套接口</span>——网管软件——网卡</span><u><span lang=EN-US><font face=Calibri><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span></font></span></u><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">网卡——网管软件——<span style="COLOR: red">套接口</span>——<strong style="mso-bidi-font-weight: normal">程序</strong></span><font face=Calibri><strong style="mso-bidi-font-weight: normal"><span lang=EN-US>B</span></strong><u><span lang=EN-US><o:p></o:p></span></u></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">若不考虑通信过程中的网络接口卡和传输介质等，则网络通信的过程就是由数据的发送者将要发送的信息写入一个套接口，再通过中间环节将信息传输到接收端的套接口中，然后就可以由接收端的应用程序将信息从套接口中取出<u><span style="COLOR: red">。因此两个程序之间的数据传输要通过套接口来完成。</span></u></span><u><span lang=EN-US style="COLOR: red"><o:p></o:p></span></u></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><u><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">套接口的本质：就是通信过程中所要使用的一些缓冲区及一些相关的数据结构。</span><span lang=EN-US style="COLOR: red"><o:p></o:p></span></u></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">套接口的分类：</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></strong></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l4 level1 lfo5"><span lang=EN-US style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>1.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">流式套接口（</span><span lang=EN-US style="COLOR: red"><font face=Calibri>SOCK_STREAM</font></span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">）</span><font face=Calibri><span lang=EN-US style="COLOR: red">;</span><span lang=EN-US>Tcp</span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">协议实现字符流的传输</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l4 level1 lfo5"><span lang=EN-US style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>2.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据套接口（</span><span lang=EN-US style="COLOR: red"><font face=Calibri>SOCK_DGRAM</font></span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">）</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">；</span><span lang=EN-US><font face=Calibri>UDP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">协议</span></p>
<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: 0; mso-list: l4 level1 lfo5"><span lang=EN-US style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore"><font face=Calibri>3.</font><span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">原始套接口（</span><span lang=EN-US style="COLOR: red"><font face=Calibri>SOCK_RAW</font></span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">）；</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">底层协议</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">套接口的编程原理</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><font face=Calibri> <o:p></o:p></font></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">服务器</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>Socket()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">开启服务——</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>bind()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">绑定端口——</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>listen()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">监听请求——</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>accept()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">接受请求——</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>recv()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">接收数据——</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>send()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">发送数据——</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>closesocket()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">关闭套接口</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">客户方</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>Socket()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">请求服务——</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>connect()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">连接服务器——</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>closesocket()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">关闭套接口</span><span lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt"><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">错误处理机制</span><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><font face=Calibri> <span lang=EN-US><o:p></o:p></span></font></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">不成功的</span><span lang=EN-US><font face=Calibri>Winsock</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">函数调用返回的最常见的值是宏定义</span><span lang=EN-US><font face=Calibri>SOCKET _ERROR</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">，在</span><span lang=EN-US><font face=Calibri> Winsock</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的头文件中</span><span lang=EN-US><font face=Calibri>(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">如</span><span lang=EN-US><font face=Calibri>&nbsp;Winsock2.h)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">，它的数值是</span><span lang=EN-US><font face=Calibri>-1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">，实际上如果调用一个</span><span lang=EN-US><font face=Calibri>Winsock</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">函数时发生了错误，则应该进一步使用</span><span lang=EN-US><font face=Calibri>WSAGetLastError()</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">函数，以获得对这一错误详细说明。该函数的使用非常简单，格式如下：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: red"><font face=Calibri><span style="mso-spacerun: yes">&nbsp; </span>Int WSAGetLastError(void)<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">这是一个无参函数，调用时返回最新发生的网络错误代码。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-border-alt: solid windowtext .5pt">网络字节顺序</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">小序在前</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">：在起始地址处存放整数的低序号字节。<span style="COLOR: red">主机字节顺序</span>。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">大序在前</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">：在起始地址处存放整数的高序号字节。<span style="COLOR: red">网络字节顺序</span>。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在</span><span lang=EN-US><font face=Calibri>Winsock</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">中有一系列的函数可用于多字节的转换，把它们从主机字节顺序转换成网络字节顺序。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>htonl()<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ntohl()</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>WSAHtonl()<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WSANtohl()</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>htons()<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ntohs()</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>WSAHtons()<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WSANtohs()</font></span></p>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/106991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-02 09:24 <a href="http://www.cppblog.com/changshoumeng/articles/106991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于UDP的通信程序</title><link>http://www.cppblog.com/changshoumeng/articles/106979.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Tue, 02 Feb 2010 00:56:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/106979.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/106979.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/106979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/106979.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/106979.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 服务器#include&nbsp;&lt;winsock2.h&gt;#include&nbsp;&lt;stdio.h&gt;#include&nbsp;&lt;stdlib.h&gt;#pragma&nbsp;comment&nbsp;(lib,"ws2_32.lib")//服务器端口为5050#define&nbsp;DEFAULT_PORT&nbsp;5050#define&nbsp;...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/106979.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/106979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-02 08:56 <a href="http://www.cppblog.com/changshoumeng/articles/106979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于TCP的通信程序</title><link>http://www.cppblog.com/changshoumeng/articles/106957.html</link><dc:creator>求知者</dc:creator><author>求知者</author><pubDate>Mon, 01 Feb 2010 10:59:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/106957.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/106957.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/106957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/106957.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/106957.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 服务器端#include&lt;Winsock2.h&gt;#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#pragma&nbsp;comment&nbsp;(lib,"ws2_32.lib")//服务器使用的端口号为5050#define&nbsp;DEFAULT_PORT&nbsp;5050//数据缓冲区长度#define&nbsp;BUFF...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/106957.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/106957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">求知者</a> 2010-02-01 18:59 <a href="http://www.cppblog.com/changshoumeng/articles/106957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>