?? 6-3.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">	要使</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">	一個應用程序可以通過</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">	在</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">	對于客戶機</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">	在</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 + -