⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6-3.html

📁 WinSock编程规范及应用
💻 HTML
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>6</TITLE>
</HEAD>
<BODY>

<B><FONT FACE="黑体" LANG="ZH-CN" SIZE=5><P><A NAME="_Toc336626884"><A NAME="_Toc336792967"><A NAME="_Toc336793443"></FONT><FONT FACE="Arial" SIZE=5>6.3 </FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=5>在</FONT><FONT FACE="Arial" SIZE=5>Windows Sockets</FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=5>中注册传输协议</A></A></A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">&#9;要使</FONT><FONT SIZE=3>Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>能够利用一个传输协议,该传输协议必须在系统上安装并且在</FONT><FONT SIZE=3>Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中注册。</FONT><FONT SIZE=3>Windows Sockets 2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>包含了一组</FONT><FONT SIZE=3>API</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>来完成这个注册过程。这个注册过程包括建立一个新的注册和取消一个已有的注册。在建立新的注册时,调用者(假设是协议栈开发商的安装程序)必须提供一组或多组完整的关于协议的信息,这些信息将被用来填充</FONT><FONT SIZE=3>PROTOCOL_INFO</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P><A NAME="_Toc336626885"><A NAME="_Toc336792968"><A NAME="_Toc336793444"></FONT><FONT SIZE=5>6.3.1 </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=5>使用多个协议</A></A></A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">&#9;一个应用程序可以通过</FONT><FONT SIZE=3>WSAEnumProtocols()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>功能调用来得到目前有多少个传输协议可以使用,并且得到与每个传输协议相关的信息,这些信息包含在</FONT><FONT SIZE=3>PROTOCOL_INFO</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构中。然而,某些传输协议可能表现出多种行为。例如</FONT><FONT SIZE=3>SPX</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>是基于消息的(发送者发送的消息的边界在网络上被保留了),但是接收的一方可以选择忽略这些边界并把套接口作为一个字节流来对待。这样就很合理地导致了</FONT><FONT SIZE=3>SPX</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>有两个不同的</FONT><FONT SIZE=3>PROTOCOL_INFO</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构条目,每一个条目对应了一种行为。</P>
<P ALIGN="JUSTIFY">&#9;在</FONT><FONT SIZE=3>Windows Sockets 1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中仅有一个地址族(</FONT><FONT SIZE=3>AF_INET</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>),它包含了数量不多的一些众所周知的套接口类型和协议标识符。这在</FONT><FONT SIZE=3>Windows Sockets 2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中已经有所改变。除了现有的地址族,套接口类型和协议标识符为了兼容性原因被保留以外,</FONT><FONT SIZE=3>Windows Sockets 2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>加入了许多唯一的但是可能并不为大家所知的地址族,套接口类型和协议标识符。不为大家所知并不意味着会对应用程序开发造成问题,因为一个企图做成协议无关的应用程序应该在对自身合适的基础上选择协议而不应该依赖于某个分配给它的特定的套接口类型或协议类型值。</FONT><FONT SIZE=3>PROTOCOL_INFO</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构中包含的通讯性质指明了协议的合适性(例如:基于消息的对应于基于字节流的,可靠的对应于不可靠的,等等)。基于合适性原则选取协议而不使用某个特定的协议名和套接口类型。</P>
<P ALIGN="JUSTIFY">&#9;对于客户机</FONT><FONT SIZE=3>/</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>服务器模型,服务器一端的应用程序最好能够在所有合适的传输协议上建立监听套接口。这样,客户机一端的应用程序就可以通过任何合适的传输协议来与服务器一端的应用程序建立连接。这样做可以使得一个客户机应用程序易于移植。例如一台运行于</FONT><FONT SIZE=3>LAN</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>上的台式机的客户机应用程序在转到运行于无线网上的笔记本计算机时就不用作任何改变。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P><A NAME="_Toc336626886"><A NAME="_Toc336792969"><A NAME="_Toc336793445"></FONT><FONT SIZE=5>6.3.2 select()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=5>函数应用中关于多个服务提供者的限制</A></A></A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">&#9;在</FONT><FONT SIZE=3>Windows Sockets 2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中,函数</FONT><FONT SIZE=3>select()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>使用</FONT><FONT SIZE=3>FD_SET</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>仅能应用于和单个服务提供者相连的套接口。但是这并不限制一个应用程序使用多个服务提供者打开多个套接口。如果应用程序开发者喜欢使用非阻塞方式编程,那么可以使用</FONT><FONT SIZE=3>WSAAsyncSelect()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数。由于该函数需要一个套接口描述字作为输入参数,那么与该套接口相连的服务提供者是很重要的。如果一个应用程序需要在一组跨越多个服务提供者的套接口上使用带有阻塞语法的函数,那么应该使用</FONT><FONT SIZE=3>WSAWaitForMultipleEvents()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数。应用程序也可以使用</FONT><FONT SIZE=3>WSAEventSelect()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数。该函数允许应用程序把</FONT><FONT SIZE=3>FD_XXX</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>网络事件和一个事件对象相连接,并且在该事件对象中处理网络事件(这一模式将在下文讨论)。</P>
<P ALIGN="JUSTIFY"></P></FONT></BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -